Description
I've tested this Robot with EURUSD and GBPUSD in H1 timeframe with good results.
But the problem is, that in one account I can run only one currency pair (e.g. EURUSD), not together with GBPUSD. Can someone have a look at it please?
many thanks
Robert
u
imWald
Joined on 16.02.2013
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: Robot_Forex.algo
- Rating: 3.75
- Installs: 49934
- Modified: 13/10/2021 09:54
Comments
Can you make the code visible?
reduce initial batch to 1000
Can you make the code visible?
any code?
My contact +5531988096960
Does anyone have the updated code?
Greeting master coder, i implore your help to update the algorithm to the latest cAlgo compatible libraries. I'm not a coder and the current algo can't be run as it is obsolete. Help appreciated much!
good morning
i want to chose TradeType buy and sell sobody help plz
[Parameter]
public TradeType TradeType { get; set; }
how can emake this to work
or
bater chose pos bay sma for trent
Good morning, how do I change the repurchase space?
The Tral_Start and Tral_Stop is not working if you dont modify a stoplossprice in OnPositionOpend()
...
private void OnPositionOpened(PositionOpenedEventArgs args)
{
double? StopLossPrice = null;
double? TakeProfitPrice = null;
if (Positions.Count == 1)
{
position = args.Position;
if (position.TradeType == TradeType.Buy)
{
TakeProfitPrice = position.EntryPrice + TakeProfit * Symbol.TickSize;
StopLossPrice = position.EntryPrice - Stop_Loss * Symbol.TickSize;
}
if (position.TradeType == TradeType.Sell)
{
TakeProfitPrice = position.EntryPrice - TakeProfit * Symbol.TickSize;
StopLossPrice = position.EntryPrice + Stop_Loss * Symbol.TickSize;
}
}
else
switch (GetPositionsSide())
{
case 0:
TakeProfitPrice = GetAveragePrice(TradeType.Buy) + TakeProfit * Symbol.TickSize;
StopLossPrice = GetAveragePrice(TradeType.Buy) - Stop_Loss * Symbol.TickSize;
break;
case 1:
TakeProfitPrice = GetAveragePrice(TradeType.Sell) - TakeProfit * Symbol.TickSize;
StopLossPrice = GetAveragePrice(TradeType.Sell) + Stop_Loss * Symbol.TickSize;
break;
}
for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (StopLossPrice != null || TakeProfitPrice != null)
ModifyPosition(position, StopLossPrice, TakeProfitPrice);
}
}
...
Hello, please help me with setting SL and other currencies. I'm not a programmer so I don't know how to do it. On the first day of testing for 5 minutes, only the profits for closing positions have a profit of EUR 15.36.x 6 it was only one position during the day at night with a loss of -18 EUR
hello, I have tested the robot in Live account, it works very well.
However, sometimes it can lead to big losses, so I think a stop loss would be ideal.
I was trying however I could not change the lot, nor can I set a stop loss that works.
could someone help me with that? From already thank you very much.
is there anyway that we can use this bot on MT5 platform ?
@MudiCapital How can I contact with you?
In backtesting is working very good but the problem is, that the robot does not open all position in real time which according to backtesting should open. Does anybody know what's going on?
LOL seams to be working. So far 100% accuracy. Got to do more tests though. Very impressed so far. Only profits no losses. I will leave it over night and next day to see the results.
pipstep dont work
Hi.
The FirstLot is 10000. Can it be changed to a smaller lot for mini accounts?
"Error CS0612: 'cAlgo.API.Robot.Trade' is obsolete"
to me is a Warning:
Error CS0612: 'cAlgo.API.Robot.Trade' is obsolete
"
Error CS0266: Cannot implicitly convert type 'double' to 'long'. An explicit conversion exists (are you missing a cast?)
may you fix so?
long NewVolume = (long)Symbol.NormalizeVolumeInUnits(FirstLot + FirstLot * Positions.Count, RoundingMode.ToNearest);
"
two errors: can someone help to fix them pls
Error CS0612: 'cAlgo.API.Robot.Trade' is obsolete
Error CS0266: Cannot implicitly convert type 'double' to 'long'. An explicit conversion exists (are you missing a cast?)
I have corrected most mistakes. However, I do not get along with the following and need help.
1. "if (Trade.IsExecuting) return" is deprecated. Against which command should / must I swap this?
2. "if (Positions.Count <MaxOrders)
{
// int rem;
long NewVolume = Symbol.NormalizeVolumeInUnits (FirstLot + FirstLot * Positions.Count, RoundingMode.ToNearest);
int positionSide = GetPositionsSide (); "
-> double can not be implicitly converted to "long". An explicit conversion already exists (possibly a conversion is missing)
How do I fix this error?
Here the complete Code:
using System;
using cAlgo.API;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
[Robot("Robot Forex", AccessRights = AccessRights.None)]
public class Robot_Forex : Robot
{
[Parameter(DefaultValue = 10000, MinValue = 1000)]
public int FirstLot { get; set; }
[Parameter(DefaultValue = 10000, MinValue = 1000)]
public int LotStep { get; set; }
//[Parameter(DefaultValue = 300)]
//public int PipStep { get; set; }
[Parameter("Stop_Loss", DefaultValue = 50, MinValue = 0)]
public int Stop_Loss { get; set; }
[Parameter("Take_Profit", DefaultValue = 180, MinValue = 10)]
public int TakeProfit { get; set; }
[Parameter("Tral_Start", DefaultValue = 50, MinValue = 10)]
public int Tral_Start { get; set; }
[Parameter("Tral_Stop", DefaultValue = 50, MinValue = 10)]
public int Tral_Stop { get; set; }
[Parameter(DefaultValue = 5, MinValue = 2)]
public int MaxOrders { get; set; }
private Position position;
private bool RobotStopped;
private string botLabel;
protected override void OnStart()
{
botLabel = ToString();
// The stop loss must be greater than tral stop
//Stop_Loss = Math.Max(Tral_Stop, Stop_Loss);
Positions.Opened += OnPositionOpened;
}
protected override void OnTick()
{
double Bid = Symbol.Bid;
double Ask = Symbol.Ask;
double Point = Symbol.TickSize;
if (Trade.IsExecuting)
return;
if (Positions.Count > 0 && RobotStopped)
return;
else
RobotStopped = false;
if (Positions.Count == 0)
SendFirstOrder(FirstLot);
else
ControlSeries();
foreach (var position in Positions)
{
if (position.SymbolName == Symbol.Name)
{
if (position.TradeType == TradeType.Buy)
{
if (Bid - GetAveragePrice(TradeType.Buy) >= Tral_Start * Point)
if (Bid - Tral_Stop * Point >= position.StopLoss)
ModifyPosition(position, Bid - Tral_Stop * Point, position.TakeProfit);
}
if (position.TradeType == TradeType.Sell)
{
if (GetAveragePrice(TradeType.Sell) - Ask >= Tral_Start * Point)
if (Ask + Tral_Stop * Point <= position.StopLoss || position.StopLoss == 0)
ModifyPosition(position, Ask + Tral_Stop * Point, position.TakeProfit);
}
}
}
}
protected override void OnError(Error CodeOfError)
{
if (CodeOfError.Code == ErrorCode.NoMoney)
{
RobotStopped = true;
Print("ERROR!!! No money for order open, robot is stopped!");
}
else if (CodeOfError.Code == ErrorCode.BadVolume)
{
RobotStopped = true;
Print("ERROR!!! Bad volume for order open, robot is stopped!");
}
}
private void SendFirstOrder(int OrderVolume)
{
int Signal = GetStdIlanSignal();
if (!(Signal < 0))
switch (Signal)
{
case 0:
ExecuteMarketOrder(TradeType.Buy, SymbolName, OrderVolume, botLabel);
break;
case 1:
ExecuteMarketOrder(TradeType.Sell, SymbolName, OrderVolume, botLabel);
break;
}
}
private void OnPositionOpened(PositionOpenedEventArgs args)
{
double? StopLossPrice = null;
double? TakeProfitPrice = null;
if (Positions.Count == 1)
{
position = args.Position;
if (position.TradeType == TradeType.Buy)
TakeProfitPrice = position.EntryPrice + TakeProfit * Symbol.TickSize;
if (position.TradeType == TradeType.Sell)
TakeProfitPrice = position.EntryPrice - TakeProfit * Symbol.TickSize;
}
else
switch (GetPositionsSide())
{
case 0:
TakeProfitPrice = GetAveragePrice(TradeType.Buy) + TakeProfit * Symbol.TickSize;
break;
case 1:
TakeProfitPrice = GetAveragePrice(TradeType.Sell) - TakeProfit * Symbol.TickSize;
break;
}
for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (StopLossPrice != null || TakeProfitPrice != null)
ModifyPosition(position, position.StopLoss, TakeProfitPrice);
}
}
private double GetAveragePrice(TradeType TypeOfTrade)
{
double Result = Symbol.Bid;
double AveragePrice = 0;
long Count = 0;
for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (position.TradeType == TypeOfTrade)
{
AveragePrice += position.EntryPrice * position.Volume;
Count += position.Volume;
}
}
if (AveragePrice > 0 && Count > 0)
Result = AveragePrice / Count;
return Result;
}
private int GetPositionsSide()
{
int Result = -1;
int i, BuySide = 0, SellSide = 0;
for (i = 0; i < Positions.Count; i++)
{
if (Positions[i].TradeType == TradeType.Buy)
BuySide++;
if (Positions[i].TradeType == TradeType.Sell)
SellSide++;
}
if (BuySide == Positions.Count)
Result = 0;
if (SellSide == Positions.Count)
Result = 1;
return Result;
}
/// <summary>
/// The gradient variable is a dynamic value that represente an equidistant grid between
/// the high value and the low value of price.
/// </summary>
///
private void ControlSeries()
{
const int BarCount = 25;
int gradient = MaxOrders - 1;
foreach (Position position in Positions.FindAll(botLabel, SymbolName))
{
if (-position.Pips > Stop_Loss)
ClosePosition(position);
}
//if (PipStep == 0)
int _pipstep = GetDynamicPipstep(BarCount, gradient);
//else
// _pipstep = PipStep;
if (Positions.Count < MaxOrders)
{
//int rem;
long NewVolume = Symbol.NormalizeVolumeInUnits(FirstLot + FirstLot * Positions.Count, RoundingMode.ToNearest);
int positionSide = GetPositionsSide();
switch (positionSide)
{
case 0:
if (Symbol.Ask < FindLastPrice(TradeType.Buy) - _pipstep * Symbol.TickSize)
{
//NewVolume = Math.DivRem((int)(FirstLot + FirstLot * Positions.Count), LotStep, out rem) * LotStep;
if (NewVolume >= LotStep)
ExecuteMarketOrder(TradeType.Buy, SymbolName, NewVolume, botLabel);
}
break;
case 1:
if (Symbol.Bid > FindLastPrice(TradeType.Sell) + _pipstep * Symbol.TickSize)
{
//NewVolume = Math.DivRem((int)(FirstLot + FirstLot * Positions.Count), LotStep, out rem) * LotStep;
if (NewVolume >= LotStep)
ExecuteMarketOrder(TradeType.Sell, SymbolName, NewVolume, botLabel);
}
break;
}
}
}
private int GetDynamicPipstep(int CountOfBars, int gradient)
{
int Result;
double HighestPrice = 0, LowestPrice = 0;
int StartBar = MarketSeries.Close.Count - 2 - CountOfBars;
int EndBar = MarketSeries.Close.Count - 2;
for (int i = StartBar; i < EndBar; i++)
{
if (HighestPrice == 0 && LowestPrice == 0)
{
HighestPrice = MarketSeries.High[i];
LowestPrice = MarketSeries.Low[i];
continue;
}
if (MarketSeries.High[i] > HighestPrice)
HighestPrice = MarketSeries.High[i];
if (MarketSeries.Low[i] < LowestPrice)
LowestPrice = MarketSeries.Low[i];
}
Result = (int)((HighestPrice - LowestPrice) / Symbol.TickSize / gradient);
return Result;
}
private double FindLastPrice(TradeType TypeOfTrade)
{
double LastPrice = 0;
for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (TypeOfTrade == TradeType.Buy)
if (position.TradeType == TypeOfTrade)
{
if (LastPrice == 0)
{
LastPrice = position.EntryPrice;
continue;
}
if (position.EntryPrice < LastPrice)
LastPrice = position.EntryPrice;
}
if (TypeOfTrade == TradeType.Sell)
if (position.TradeType == TypeOfTrade)
{
if (LastPrice == 0)
{
LastPrice = position.EntryPrice;
continue;
}
if (position.EntryPrice > LastPrice)
LastPrice = position.EntryPrice;
}
}
return LastPrice;
}
private int GetStdIlanSignal()
{
int Result = -1;
int LastBarIndex = MarketSeries.Close.Count - 2;
int PrevBarIndex = LastBarIndex - 1;
if (MarketSeries.Close[LastBarIndex] > MarketSeries.Open[LastBarIndex])
if (MarketSeries.Close[PrevBarIndex] > MarketSeries.Open[PrevBarIndex])
Result = 0;
if (MarketSeries.Close[LastBarIndex] < MarketSeries.Open[LastBarIndex])
if (MarketSeries.Close[PrevBarIndex] < MarketSeries.Open[PrevBarIndex])
Result = 1;
return Result;
}
}
}
@MudiCapital How to contact you? Thank you.
have anyone tried this on a live account? then how does the SL work?
Would be nice also to change the min lot from 10k to 1k....
i already fixed the the trail stop and start and add magic index to use it for many currencies same time , contact me for more details
any can modify this so it can open orders in diferentes currency at the same time by adding magic index or somthin
I am trying to compile the code with the current version and it gives two errors.
It's as if it were using another cAlgo library or similar issue.
Could you please help me out?
Thank you!
why does equity drop very quickly at the end of a backtest?
Hi everyone,
after optimizing and backtesting the robot works fine but unfortunatelly only in backtesting. In the demo account the robot in EURUSD 1H do not open any positions or even if, than with no stop loss and with an error message
07/04/2016 11:03:30.940 | Robot_Forex, EURUSD, h1 | Request to modify position XXXXXXXXX failed with error "TRADING_BAD_STOPS".
After adding the stop loss manually, the robot continues to work with it and modifies as needed but the robot itself is somehow not able to attach the stop loss by itself.
Currently testing on Pepperstone ECN demo with leverage 1:500 with following settings
First lot 1000 (this has been modified in cAlgo by me)
TP 50
Tral_Start 30
Tral_Stop 30
PipStep 80
MaxOrders 3
Anyboty has a tip how to correct the behaviour of missing StopLoss
Thanks in advance
the new versions gives 3 errors
Hi CTDN Team and Members,
Can anyone explain me how to add label to opened positions. So I would know that the position has been opened by Robot_Forex.
FYI I am not programmer so please explain to me in a simpler way. After which line number the text needs to be add etc.
Many thanks.
Le projet modifié se trouve sur github, il peut être récupéré directement dans visual studio avec les outils intégrés à vs2013 de gestion de versionning de code sources
The modified project is on github, it can be recovered directly into visual studio with the tools built into source code versioning management in vs2013
Voici le programme Robot_Forex avec l'ajout d'un stop Loss et la correction des méthodes obsolètes :
using System;
using cAlgo.API;
using cAlgo.API.Internals;namespace cAlgo.Robots
{
[Robot("Robot Forex", AccessRights = AccessRights.None)]
public class Robot_Forex : Robot
{
[Parameter(DefaultValue = 10000, MinValue = 1000)]
public int FirstLot { get; set; }[Parameter(DefaultValue = 10000, MinValue = 1000)]
public int LotStep { get; set; }//[Parameter(DefaultValue = 300)]
//public int PipStep { get; set; }[Parameter("Stop_Loss", DefaultValue = 50, MinValue = 0)]
public int Stop_Loss { get; set; }[Parameter("Take_Profit", DefaultValue = 180, MinValue = 10)]
public int TakeProfit { get; set; }[Parameter("Tral_Start", DefaultValue = 50, MinValue = 10)]
public int Tral_Start { get; set; }[Parameter("Tral_Stop", DefaultValue = 50, MinValue = 10)]
public int Tral_Stop { get; set; }
[Parameter(DefaultValue = 5, MinValue = 2)]
public int MaxOrders { get; set; }private Position position;
private bool RobotStopped;
private string botLabel;
protected override void OnStart()
{
botLabel = ToString();// The stop loss must be greater than tral stop
//Stop_Loss = Math.Max(Tral_Stop, Stop_Loss);Positions.Opened += OnPositionOpened;
}protected override void OnTick()
{
double Bid = Symbol.Bid;
double Ask = Symbol.Ask;
double Point = Symbol.TickSize;if (Trade.IsExecuting)
return;if (Positions.Count > 0 && RobotStopped)
return;
else
RobotStopped = false;if (Positions.Count == 0)
SendFirstOrder(FirstLot);
else
ControlSeries();foreach (var position in Positions)
{
if (position.SymbolCode == Symbol.Code)
{if (position.TradeType == TradeType.Buy)
{
if (Bid - GetAveragePrice(TradeType.Buy) >= Tral_Start * Point)
if (Bid - Tral_Stop * Point >= position.StopLoss)
ModifyPosition(position, Bid - Tral_Stop * Point, position.TakeProfit);
}if (position.TradeType == TradeType.Sell)
{
if (GetAveragePrice(TradeType.Sell) - Ask >= Tral_Start * Point)
if (Ask + Tral_Stop * Point <= position.StopLoss || position.StopLoss == 0)
ModifyPosition(position, Ask + Tral_Stop * Point, position.TakeProfit);
}
}
}
}protected override void OnError(Error CodeOfError)
{
if (CodeOfError.Code == ErrorCode.NoMoney)
{
RobotStopped = true;
Print("ERROR!!! No money for order open, robot is stopped!");
}
else if (CodeOfError.Code == ErrorCode.BadVolume)
{
RobotStopped = true;
Print("ERROR!!! Bad volume for order open, robot is stopped!");
}
}private void SendFirstOrder(int OrderVolume)
{
int Signal = GetStdIlanSignal();
if (!(Signal < 0))
switch (Signal)
{
case 0:
ExecuteMarketOrder(TradeType.Buy, Symbol, OrderVolume, botLabel);
break;
case 1:
ExecuteMarketOrder(TradeType.Sell, Symbol, OrderVolume, botLabel);
break;
}
}private void OnPositionOpened(PositionOpenedEventArgs args)
{
double? StopLossPrice = null;
double? TakeProfitPrice = null;if (Positions.Count == 1)
{
position = args.Position;if (position.TradeType == TradeType.Buy)
TakeProfitPrice = position.EntryPrice + TakeProfit * Symbol.TickSize;
if (position.TradeType == TradeType.Sell)
TakeProfitPrice = position.EntryPrice - TakeProfit * Symbol.TickSize;
}
else
switch (GetPositionsSide())
{
case 0:
TakeProfitPrice = GetAveragePrice(TradeType.Buy) + TakeProfit * Symbol.TickSize;
break;
case 1:
TakeProfitPrice = GetAveragePrice(TradeType.Sell) - TakeProfit * Symbol.TickSize;
break;
}for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (StopLossPrice != null || TakeProfitPrice != null)
ModifyPosition(position, position.StopLoss, TakeProfitPrice);
}
}private double GetAveragePrice(TradeType TypeOfTrade)
{
double Result = Symbol.Bid;
double AveragePrice = 0;
long Count = 0;for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (position.TradeType == TypeOfTrade)
{
AveragePrice += position.EntryPrice * position.Volume;
Count += position.Volume;
}
}
if (AveragePrice > 0 && Count > 0)
Result = AveragePrice / Count;
return Result;
}private int GetPositionsSide()
{
int Result = -1;
int i, BuySide = 0, SellSide = 0;for (i = 0; i < Positions.Count; i++)
{
if (Positions[i].TradeType == TradeType.Buy)
BuySide++;
if (Positions[i].TradeType == TradeType.Sell)
SellSide++;
}
if (BuySide == Positions.Count)
Result = 0;
if (SellSide == Positions.Count)
Result = 1;
return Result;
}/// <summary>
/// The gradient variable is a dynamic value that represente an equidistant grid between
/// the high value and the low value of price.
/// </summary>
///
private void ControlSeries()
{
const int BarCount = 25;
int gradient = MaxOrders - 1;foreach (Position position in Positions.FindAll(botLabel, Symbol))
{
if (-position.Pips > Stop_Loss)
ClosePosition(position);}
//if (PipStep == 0)
int _pipstep = GetDynamicPipstep(BarCount, gradient);
//else
// _pipstep = PipStep;if (Positions.Count < MaxOrders)
{
//int rem;
long NewVolume = Symbol.NormalizeVolume(FirstLot + FirstLot * Positions.Count, RoundingMode.ToNearest);
int positionSide = GetPositionsSide();switch (positionSide)
{
case 0:
if (Symbol.Ask < FindLastPrice(TradeType.Buy) - _pipstep * Symbol.TickSize)
{
//NewVolume = Math.DivRem((int)(FirstLot + FirstLot * Positions.Count), LotStep, out rem) * LotStep;if (NewVolume >= LotStep)
ExecuteMarketOrder(TradeType.Buy, Symbol, NewVolume, botLabel);
}
break;case 1:
if (Symbol.Bid > FindLastPrice(TradeType.Sell) + _pipstep * Symbol.TickSize)
{
//NewVolume = Math.DivRem((int)(FirstLot + FirstLot * Positions.Count), LotStep, out rem) * LotStep;if (NewVolume >= LotStep)
ExecuteMarketOrder(TradeType.Sell, Symbol, NewVolume, botLabel);
}
break;
}
}}
private int GetDynamicPipstep(int CountOfBars, int gradient)
{
int Result;
double HighestPrice = 0, LowestPrice = 0;
int StartBar = MarketSeries.Close.Count - 2 - CountOfBars;
int EndBar = MarketSeries.Close.Count - 2;for (int i = StartBar; i < EndBar; i++)
{
if (HighestPrice == 0 && LowestPrice == 0)
{
HighestPrice = MarketSeries.High[i];
LowestPrice = MarketSeries.Low[i];
continue;
}
if (MarketSeries.High[i] > HighestPrice)
HighestPrice = MarketSeries.High[i];
if (MarketSeries.Low[i] < LowestPrice)
LowestPrice = MarketSeries.Low[i];
}Result = (int)((HighestPrice - LowestPrice) / Symbol.TickSize / gradient);
return Result;
}private double FindLastPrice(TradeType TypeOfTrade)
{
double LastPrice = 0;for (int i = 0; i < Positions.Count; i++)
{
position = Positions[i];
if (TypeOfTrade == TradeType.Buy)
if (position.TradeType == TypeOfTrade)
{
if (LastPrice == 0)
{
LastPrice = position.EntryPrice;
continue;
}
if (position.EntryPrice < LastPrice)
LastPrice = position.EntryPrice;
}
if (TypeOfTrade == TradeType.Sell)
if (position.TradeType == TypeOfTrade)
{
if (LastPrice == 0)
{
LastPrice = position.EntryPrice;
continue;
}
if (position.EntryPrice > LastPrice)
LastPrice = position.EntryPrice;
}
}
return LastPrice;
}private int GetStdIlanSignal()
{
int Result = -1;
int LastBarIndex = MarketSeries.Close.Count - 2;
int PrevBarIndex = LastBarIndex - 1;if (MarketSeries.Close[LastBarIndex] > MarketSeries.Open[LastBarIndex])
if (MarketSeries.Close[PrevBarIndex] > MarketSeries.Open[PrevBarIndex])
Result = 0;
if (MarketSeries.Close[LastBarIndex] < MarketSeries.Open[LastBarIndex])
if (MarketSeries.Close[PrevBarIndex] < MarketSeries.Open[PrevBarIndex])
Result = 1;
return Result;
}
}
}
@Juddly01
The problem is
ExecuteMarketOrder (TradeType.Buy, Symbol, OrderVolume);
replace by
Trade.CreateBuyMarketOrder(Symbol, OrderVolume);
Hi CTDN Team and Members,
Does anyone have five minutes to fix this code?
I've had a go but I'm a beginner and pretty lame.
I cleaned up all the Account.Positions, TickSize and Trade.ModifyPosition warnings.
I replaced the Trade.CreateBuyMarketOrder.
Im stuck on the if (Trade.IsExecuting)
And the 2nd batch of Trade.Create
There must be a bug elsewhere also as the Tral_Start and Tral_Stop Parameters seem to have absolutely no effect.
Any help would be really appreciated and I think you guys could probs fix it in 3mins flat.
Its actually a good Bot even with the bugs and I'm curious to see its results when working as originally designed.
It would be a shame to leave a broken Bot in the library.
Thanks guys,
Juddly
This cbot is really fine- it starts with a minimum of 10000 units.
I want to work with smaller amounts and to start with an amout of 1000 units.
Can anybody tell me how to change the cbots definitions ?
Thanks for your support !
I am a beginner. We try in five steps. When the big announcement, I'll try to stop. It is a very good performance, but what if you have five or more away in the opposite direction, without creating a stop-loss, in both dollars and if you began to step in the opposite direction? But is the wrong way. . Is it possible to add a tag? I want to try.
Please guys!!!! Tralstart and Tralstop!?
:(
:)
Hello,
I understand everything about this martingal but tralstart and tralstop. Someone can tell me what this is for?
Thank you for your answer.
This is a hedging robot that opens new trades based upon average values of other open trades.
It works fine on the main pairs in backtesting but it has a flaw: after and during the test you see beautifull results, but there can remain some open trades with ultra high losses, as it doesn't close trades with a stop loss. As soon as you add a stoploss to the trades, the results will probably fall dramatically, because trades are not in balance anymore.
Have not tested this live, but that is what the code teaches me. It has no real strategy than hedging. Quite a risk.
sorry mates, i mean this robot...
Hi, there is someone that use this indicator in real account?
I can solve the problem of the Nekert robot working on multiple currencies in two days. Anyone who wants to solve the problem, send a message. Also, it is better to open the transactions manually on a daily basis, and the robot should only do capital management. Anyone who wants to be a sponsor can contact me. email: khashayar.nezami@gmail.com