backtesting and optimization not possible
backtesting and optimization not possible
11 May 2015, 17:05
to delay the startup or slow certain function of my robot,
j 'uses this solution.
using System.Diagnostics;
using System.Threading;
[Parameter("minute", DefaultValue = 1)]
public int Minute { get; set; }
protected override void OnStart()
{
var stopwatch = Stopwatch.StartNew();
System.Threading.Thread.Sleep(Minute * 60000);
Console.WriteLine(stopwatch.ElapsedMilliseconds);
......
it works well,
.but I am having a problem ...
I can not make Bactesting (endless), or optimization.
do you think that there is a solution?
I'll give you an example with sample martingale.
I have changed the code to delay between winning trades.
it works very well in demo or real, but backtesting or optimization impossible ...
cordially
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ------------------------------------------------------------------------------------------------- // // This code is a cAlgo API sample. // // This cBot is intended to be used as a sample and does not guarantee any particular outcome or // profit of any kind. Use it at your own risk // // The "Sample Martingale cBot" creates a random Sell or Buy order. If the Stop loss is hit, a new // order of the same type (Buy / Sell) is created with double the Initial Volume amount. The cBot will // continue to double the volume amount for all orders created until one of them hits the take Profit. // After a Take Profit is hit, a new random Buy or Sell order is created with the Initial Volume amount. // // ------------------------------------------------------------------------------------------------- using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; using System.Diagnostics; using System.Threading; namespace cAlgo { [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class SampleMartingalecBot : Robot { [Parameter("Initial Volume", DefaultValue = 10000, MinValue = 0)] public int InitialVolume { get; set; } [Parameter("Stop Loss", DefaultValue = 10)] public int StopLoss { get; set; } [Parameter("Take Profit", DefaultValue = 10)] public int TakeProfit { get; set; } [Parameter("delay minute", DefaultValue = 1)] public int Minute { get; set; } private Random random = new Random(); protected override void OnStart() { Positions.Closed += OnPositionsClosed; Order1(); } private void Order1() { var stopwatch = Stopwatch.StartNew(); System.Threading.Thread.Sleep(Minute * 60000); Console.WriteLine(stopwatch.ElapsedMilliseconds); ExecuteOrder(InitialVolume, GetRandomTradeType()); } private void ExecuteOrder(long volume, TradeType tradeType) { var result = ExecuteMarketOrder(tradeType, Symbol, volume, "Martingale", StopLoss, TakeProfit); if (result.Error == ErrorCode.NoMoney) Stop(); } private void OnPositionsClosed(PositionClosedEventArgs args) { Print("Closed"); var position = args.Position; { if (position.Label != "Martingale" || position.SymbolCode != Symbol.Code) return; if (position.Pips > 0) Order1(); if (position.GrossProfit > 0) { ExecuteOrder(InitialVolume, GetRandomTradeType()); } else { ExecuteOrder((int)position.Volume * 2, position.TradeType); } } } private TradeType GetRandomTradeType() { return random.Next(2) == 0 ? TradeType.Buy : TradeType.Sell; } } }
Replies
tradermatrix
17 May 2015, 19:27
thank you,
it's a shame that the stopwatch system is not considered in backtesting(delayed backtesting) and optimization.il is very simple to use.
cordially.
@tradermatrix
bosma
11 May 2015, 19:41
It would be great if cAlgo would override System Time while back-testing to equal the time it would have been. I'm not positive what you are trying to do in OnPositionClosed, so I don't get your functionality completely, but something like this would work (have to use 1min charts).
@bosma