Topics
Replies
erikvb
19 Mar 2019, 10:52
( Updated at: 21 Dec 2023, 09:21 )
Hi Panagiotis,
thanks again for the input.
but when i backtest i get 3900 trades
there are only 9 signals between 6/03/2019 and 9/03/2019
So it seems the bot never pickup the signals correctly.
last code i tested : from 6/03/2019 and 9/03/2019 / timeframe hour / periods 14
thanks again for your time
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class HMABOT : Robot
{
[Parameter("Label", DefaultValue = "HMA")]
public string Label { get; set; }
[Parameter("Volume", DefaultValue = 1000)]
public int Volume { get; set; }
[Parameter("Periods", DefaultValue = 14)]
public int Periods { get; set; }
internal HMASignals HmaSignals { get; set; }
private MarketSeries HmaDaySeries;
private HMASignals _hmaSignal;
protected override void OnStart()
{
var index = MarketSeries.Close.Count - 1;
// Put your initialization logic here
HmaDaySeries = MarketData.GetSeries(TimeFrame.Hour);
//_hmaSignal = Indicators.GetIndicator<HMASignals>(Periods, Source, false, false, 1, false, 1);
_hmaSignal = Indicators.GetIndicator<HMASignals>(Periods, true, true, 5, true, 25);
// _hmaSignal = Indicators.GetIndicator(HmaDaySeries, 21, false, false, 3, false, 50);
// _hmaSignal = Indicators.GetIndicator<HMASignals>(HmaDaySeries, 21, false, false, 3, false, 24);
}
protected override void OnTick()
{
// Put your core logic here
// BEARISH
double i = _hmaSignal.hma.LastValue;
// Print("{0}", _hmaSignal.hma.LastValue);
//if (_hmaSignal.IsBearish && Positions.FindAll(Label, Symbol, TradeType.Buy).Length == 0)
if (_hmaSignal.IsBearish && Positions.Count(x => x.Label == Label && x.TradeType == TradeType.Buy) == 0)
{
close(TradeType.Sell);
trade(TradeType.Buy);
}
// BULLISH
//if (_hmaSignal.IsBullish && Positions.FindAll(Label, Symbol, TradeType.Buy).Length == 0)
if (_hmaSignal.IsBullish && Positions.Count(x => x.Label == Label && x.TradeType == TradeType.Sell) == 0)
{
close(TradeType.Buy);
trade(TradeType.Sell);
}
}
private void close(TradeType tradeType)
{
foreach (var position in Positions.FindAll(Label, Symbol, tradeType))
ClosePosition(position);
}
private void trade(TradeType tradetype)
{
ExecuteMarketOrder(tradetype, Symbol, Volume, Label);
}
protected override void OnStop()
{
// Put your deinitialization logic here
}
}
}
@erikvb
erikvb
18 Mar 2019, 13:51
Hi Panagiotis,
I cleanup the code this weekend.
But when i backtesting the bot , he open every minute a new trade. backtest from 06/03/2018 to 09/03/2019
In the events log the bot open more then 390 sell positions .
when the bot get the first buy position ( trade 390) the bot stop with working.
i just need 1 order between both signals.
I need to use max trades ?
760-371Position Closed06/03/2018 08:31:00.000€ 1kSell1.23510--1.234490.546.11148.151159.3
761-372Position Closed06/03/2018 08:31:00.000€ 1kSell1.23522--1.234490.657.31148.741159.3
762-373Position Closed06/03/2018 08:31:00.000€ 1kSell1.23527--1.234490.697.81149.371159.3
763-374Position Closed06/03/2018 08:31:00.000€ 1kSell1.23525--1.234490.677.61149.981159.3
764-375Position Closed06/03/2018 08:31:00.000€ 1kSell1.23518--1.234490.616.91150.531159.3
765-376Position Closed06/03/2018 08:31:00.000€ 1kSell1.23516--1.234490.596.71151.061159.3
766-377Position Closed06/03/2018 08:31:00.000€ 1kSell1.23528--1.234490.77.91151.71159.3
767-378Position Closed06/03/2018 08:31:00.000€ 1kSell1.23546--1.234490.869.71152.51159.3
768-379Position Closed06/03/2018 08:31:00.000€ 1kSell1.23535--1.234490.768.61153.21159.3
769-380Position Closed06/03/2018 08:31:00.000€ 1kSell1.23544--1.234490.849.51153.981159.3
770-381Position Closed06/03/2018 08:31:00.000€ 1kSell1.23538--1.234490.798.91154.711159.3
771-382Position Closed06/03/2018 08:31:00.000€ 1kSell1.23535--1.234490.768.61155.411159.3
772-383Position Closed06/03/2018 08:31:00.000€ 1kSell1.23527--1.234490.697.81156.041159.3
773-384Position Closed06/03/2018 08:31:00.000€ 1kSell1.23541--1.234490.819.21156.791159.3
774-385Position Closed06/03/2018 08:31:00.000€ 1kSell1.23552--1.234490.9110.31157.641159.3
775-386Position Closed06/03/2018 08:31:00.000€ 1kSell1.23542--1.234490.829.31158.41159.3
776-387Position Closed06/03/2018 08:31:00.000€ 1kSell1.23523--1.234490.657.41158.991159.3
777-388Position Closed06/03/2018 08:31:00.000€ 1kSell1.23475--1.234490.232.61159.161159.3
778-389Position Closed06/03/2018 08:31:00.000€ 1kSell1.23472--1.234490.22.31159.31159.3
779-390Create Position06/03/2018 08:31:00.000€ 1kBuy1.23449------1159.15
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class HMABOT : Robot
{
[Parameter("Label", DefaultValue = "HMA")]
public string Label { get; set; }
[Parameter("Volume", DefaultValue = 1000)]
public int Volume { get; set; }
[Parameter("Periods", DefaultValue = 14)]
public int Periods { get; set; }
internal HMASignals HmaSignals { get; set; }
private MarketSeries HmaDaySeries;
private HMASignals _hmaSignal;
protected override void OnStart()
{
var index = MarketSeries.Close.Count - 1;
// Put your initialization logic here
HmaDaySeries = MarketData.GetSeries(TimeFrame.Hour);
//_hmaSignal = Indicators.GetIndicator<HMASignals>(Periods, Source, false, false, 1, false, 1);
//_hmaSignal = Indicators.GetIndicator<HMASignals>(Periods, true, true, 5, true, 25);
// _hmaSignal = Indicators.GetIndicator(HmaDaySeries, 21, false, false, 3, false, 50);
_hmaSignal = Indicators.GetIndicator<HMASignals>(HmaDaySeries, 21, false, false, 3, false, 24);
}
protected override void OnTick()
{
// Put your core logic here
// BEARISH
double i = _hmaSignal.hma.LastValue;
if (_hmaSignal.IsBearish && Positions.FindAll(Label, Symbol, TradeType.Buy).Length == 0)
{
close(TradeType.Sell);
trade(TradeType.Buy);
}
// BULLISH
if (_hmaSignal.IsBullish && Positions.FindAll(Label, Symbol, TradeType.Buy).Length == 0)
{
close(TradeType.Buy);
trade(TradeType.Sell);
}
}
private void close(TradeType tradeType)
{
foreach (var position in Positions.FindAll(Label, Symbol, tradeType))
ClosePosition(position);
}
private void trade(TradeType tradetype)
{
ExecuteMarketOrder(tradetype, Symbol, Volume, Label);
}
protected override void OnStop()
{
// Put your deinitialization logic here
}
}
}
@erikvb
erikvb
12 Mar 2019, 12:49
crash on backtest
Thank you for the helping hand Panagiotis.
I still need to learn a lot about programming in C+ :)
At the backtessting a get a crash on start :
08/02/2011 09:56:00.000 | Backtesting was stopped
08/02/2011 09:56:00.000 | Crashed in OnStart with ArgumentException: Incorrect parameters count. Parameternaam: parameterValues
08/02/2011 09:56:00.000 | Backtesting started
I see i copy not the indicatorcode in the topic.
i use this indicator :
https://ctrader.com/algos/indicators/show/930
I change also the timeframe to hour in the robotcode
HmaDaySeries = MarketData.GetSeries(TimeFrame.Hour);
thank you all
@erikvb
erikvb
19 Mar 2019, 12:51 ( Updated at: 21 Dec 2023, 09:21 )
Hi Panagiotis,
I found out i was backtesting from 2018 and not 2019 :)
but it not fix the problem compleet.
i backtest now in visual mode , the problem is you get different signals :(
i see the singals change during the last hour candel many times when there is high volatility.
so i think this will never working good.
i need to rethink everything.
@erikvb