Description
Modify all positions to one TP and SL by average price
// Modify all TakeProfit and StopLoss by Average Price. "Aggressive Trading"
// salr22@hotmail.com, www.borsat.net
// -------------------------------------------------------------------------------
//
// Modify all TakeProfit and StopLoss by Average Price. "Aggressive Trading"
// salr22@hotmail.com, www.borsat.net
// AggressiveModifyPositions.v2
// -------------------------------------------------------------------------------
using System;
using cAlgo.API;
using System.Linq;
namespace cAlgo.Robots
{
[Robot()]
public class AggressiveModifyPostions : Robot
{
[Parameter("TakeProfit (pips)", DefaultValue = 10.0)]
public int _takeProfit { get; set; }
[Parameter("StopLoss (pips)", DefaultValue = 50.0)]
public int _stopLoss { get; set; }
[Parameter("TakeProfit_Buy (price)", DefaultValue = 0)]
public double _takeProfitPrBuy { get; set; }
[Parameter("StopLoss_Buy (price)", DefaultValue = 0)]
public double _stopLossPrBuy { get; set; }
[Parameter("TakeProfit_Sell (price)", DefaultValue = 0)]
public double _takeProfitPrSell { get; set; }
[Parameter("StopLoss_Sell (price)", DefaultValue = 0)]
public double _stopLossPrSell { get; set; }
protected override void OnTick()
{
if (Trade.IsExecuting)
return;
double _avrgB = 0;
double _avrgS = 0;
double _lotsB = 0;
double _lotsS = 0;
double _tpB = 0;
double _slB = 0;
double _tpS = 0;
double _slS = 0;
// get average
foreach (var position1 in Account.Positions)
{
if (Symbol.Code == position1.SymbolCode)
{
if (position1.TradeType == TradeType.Buy)
{
_avrgB = _avrgB + (position1.Volume * position1.EntryPrice);
_lotsB = _lotsB + position1.Volume;
}
if (position1.TradeType == TradeType.Sell)
{
_avrgS = _avrgS + (position1.Volume * position1.EntryPrice);
_lotsS = _lotsS + position1.Volume;
}
}
}
_avrgB = Math.Round(_avrgB / _lotsB, Symbol.Digits);
_avrgS = Math.Round(_avrgS / _lotsS, Symbol.Digits);
string text = string.Format("{0}", "\n\n" + "Average Buy: " + _avrgB + "\n\n" + "Average Sell: " + _avrgS);
ChartObjects.DrawText("avrg", text.PadLeft(10), StaticPosition.TopLeft, Colors.White);
if (_takeProfit != 0)
{
_tpB = Math.Round(_avrgB + Symbol.PipSize * _takeProfit, Symbol.Digits);
_tpS = Math.Round(_avrgS - Symbol.PipSize * _takeProfit, Symbol.Digits);
}
if (_stopLoss != 0)
{
_slB = Math.Round(_avrgB - Symbol.PipSize * _stopLoss, Symbol.Digits);
_slS = Math.Round(_avrgS + Symbol.PipSize * _stopLoss, Symbol.Digits);
}
if (_takeProfitPrBuy != 0)
{
_tpB = _takeProfitPrBuy;
}
if (_stopLossPrBuy != 0)
{
_slB = _stopLossPrBuy;
}
if (_takeProfitPrSell != 0)
{
_tpS = _takeProfitPrSell;
}
if (_stopLossPrSell != 0)
{
_slS = _stopLossPrSell;
}
// modify
foreach (Position position in Account.Positions.Where(position => Symbol.Code == position.SymbolCode))
{
double sl = position.TradeType == TradeType.Buy ? _slB : _slS;
double tp = position.TradeType == TradeType.Buy ? _tpB : _tpS;
if (position.TakeProfit == tp && position.StopLoss == sl)
continue;
if (position.TakeProfit != tp && position.StopLoss != sl)
{
if (!tp.Equals(0.0) && !sl.Equals(0.0))
Trade.ModifyPosition(position, sl, tp);
else if (tp.Equals(0.0) && sl.Equals(0.0))
Trade.ModifyPosition(position, null, null);
else if (tp.Equals(0.0) && !sl.Equals(0.0))
Trade.ModifyPosition(position, sl, null);
else
Trade.ModifyPosition(position, null, tp);
continue;
}
// md tp
if (position.TakeProfit != tp && position.StopLoss == sl)
{
if (!tp.Equals(0.0))
Trade.ModifyPosition(position, position.StopLoss, tp);
else
Trade.ModifyPosition(position, position.StopLoss, null);
continue;
}
//md sl
if (position.TakeProfit == tp && position.StopLoss != sl)
if (!sl.Equals(0.0))
Trade.ModifyPosition(position, sl, position.TakeProfit);
else if (tp.Equals(0.0) && sl.Equals(0.0))
Trade.ModifyPosition(position, null, position.TakeProfit);
}
}
}
}
salr22
Joined on 01.10.2013
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: ###AggressiveModifyPostions.v2.algo
- Rating: 0
- Installs: 3229
- Modified: 13/10/2021 09:54
Warning! Running cBots downloaded from this section may lead to financial losses. Use them at your own risk.
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
TR
merci pour le code
j ai construi un robot et inclus ton code.(je travaille déja avec un systeme similaire)
il faut noter que les résultats sont bons pour "_takeProfit".
mais il vaut mieux supprimer le _stopLoss,car il provoque de grandes pertes.
@+
thank you for the code
I have Constructed a robot and included your code. (I work already with a similar system)
note that the results are good for "_takeProfit."
but it is better to remove the _stopLoss because it causes great loss.
@+
the mod.position (price) not work when i set the price es. open buy at 1.32567 and when load the cbot my price position is 1.32467, i set stop loss price at 1.32450 but ctrade send ne error Request to amend position PID421666 (SL: 1.32450) is REJECTED with error "TRADING_BAD_STOPS".
why don't modify my position when open and lost at tot. pips at price ?
i set this price because when price go up decreases ,my lost profit.