前提・実現したいこと
ハル移動平均線の向きによる途転売買をしたいのですが、
バーが変わるごとにポジションを取ります。
発生している問題・エラーメッセージ
バーが変わるごとにポジションを取ります。
途転売買で1回だけポジションを持ちたいのですが、、。
該当のソースコード
//--- Inputs
input double Lots= 0.01;
int MAGICMA= 20131111;
double hma_11,hma_12;
int buys=0,sells=0;
void OnTick()
{
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
//---
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//--- get Moving Average
hma_11= iCustom(NULL,0,"_HMA",1,1);hma_12= iCustom(NULL,0,"_HMA",1,2);
//---
for( i=0;i<OrdersTotal();i++ )
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//--- check order type
if(OrderType()==OP_BUY)
{
if( buys>0 && hma_12>hma_11)//2 && hma_21>hma_11 )////////////close long
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if( sells>0 && hma_12<hma_11 )//&& hma_11>hma_21 )////////////close short
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
//---
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
int res;
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//--- get Moving Average
hma_11= iCustom(NULL,0,"_HMA",1,1);hma_12= iCustom(NULL,0,"_HMA",1,2);
//--- sell conditions
if( buys==0 && hma_12>hma_11)////////////////////////////////////////open sell
{
res=OrderSend(Symbol(),OP_SELL, Lots ,Bid,3,0,0,"",MAGICMA,0,Red);
}
//--- buy conditions
if( sells==0 && hma_12<hma_11)///////////////////////////////////////open buy
{
res=OrderSend(Symbol(),OP_BUY, Lots ,Ask,3,0,0,"",MAGICMA,0,Blue);
}
}////////////////////////////////////////////////////////////////////////////////////////end
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
実際のバックテスト結果。
1 2021.11.08 00:00 sell 1 0.01 113.274 0.000 0.000 0.00 10000.00
2 2021.11.08 04:00 sell 2 0.01 113.591 0.000 0.000 0.00 10000.00
3 2021.11.08 08:00 sell 3 0.01 113.565 0.000 0.000 0.00 10000.00
4 2021.11.08 12:00 sell 4 0.01 113.388 0.000 0.000 0.00 10000.00
5 2021.11.08 16:00 sell 5 0.01 113.351 0.000 0.000 0.00 10000.00
6 2021.11.08 20:00 sell 6 0.01 113.232 0.000 0.000 0.00 10000.00
7 2021.11.09 00:00 sell 7 0.01 113.211 0.000 0.000 0.00 10000.00
8 2021.11.09 04:00 sell 8 0.01 113.125 0.000 0.000 0.00 10000.00
9 2021.11.09 08:00 sell 9 0.01 112.766 0.000 0.000 0.00 10000.00
10 2021.11.09 12:00 sell 10 0.01 112.844 0.000 0.000 0.00 10000.00
11 2021.11.09 16:00 sell 11 0.01 112.869 0.000 0.000 0.00 10000.00
12 2021.11.09 20:00 sell 12 0.01 112.831 0.000 0.000 0.00 10000.00
13 2021.11.10 00:00 sell 13 0.01 112.836 0.000 0.000 0.00 10000.00
14 2021.11.10 04:00 close 1 0.01 112.920 0.000 0.000 3.13 10003.13
15 2021.11.10 08:00 close 2 0.01 112.889 0.000 0.000 6.22 10009.36
16 2021.11.10 12:00 close 3 0.01 113.224 0.000 0.000 3.01 10012.37
17 2021.11.10 16:00 close 4 0.01 113.453 0.000 0.000 -0.57 10011.81
18 2021.11.10 20:00 close 5 0.01 113.936 0.000 0.000 -5.13 10006.68
19 2021.11.11 00:00 close 6 0.01 113.907 0.000 0.000 -5.92 10000.76
20 2021.11.11 04:00 close 7 0.01 114.073 0.000 0.000 -7.56 9993.21
21 2021.11.11 08:00 close 8 0.01 113.952 0.000 0.000 -7.26 9985.95
22 2021.11.11 12:00 close 9 0.01 114.089 0.000 0.000 -11.60 9974.36
23 2021.11.11 16:00 close 10 0.01 113.885 0.000 0.000 -9.14 9965.22
24 2021.11.11 20:00 sell 14 0.01 114.080 0.000 0.000 0.00 9965.22
25 2021.11.12 00:00 sell 15 0.01 114.055 0.000 0.000 0.00 9965.22
26 2021.11.12 04:00 close 11 0.01 114.291 0.000 0.000 -12.43 9952.79
27 2021.11.12 08:00 close 12 0.01 114.212 0.000 0.000 -12.08 9940.71
28 2021.11.12 12:00 sell 16 0.01 114.024 0.000 0.000 0.00 9940.71
29 2021.11.12 16:00 sell 17 0.01 113.954 0.000 0.000 0.00 9940.71
30 2021.11.12 20:00 sell 18 0.01 113.904 0.000 0.000 0.00 9940.71
31 2021.11.12 23:59 close at stop 18 0.01 113.869 0.000 0.000 0.31 9941.02
32 2021.11.12 23:59 close at stop 17 0.01 113.869 0.000 0.000 0.75 9941.77
33 2021.11.12 23:59 close at stop 16 0.01 113.869 0.000 0.000 1.36 9943.13
34 2021.11.12 23:59 close at stop 15 0.01 113.869 0.000 0.000 1.63 9944.76
35 2021.11.12 23:59 close at stop 14 0.01 113.869 0.000 0.000 1.85 9946.61
36 2021.11.12 23:59 close at stop 13 0.01 113.869 0.000 0.000 -9.07 9937.54
_1番から13番までバー発生ごとに注文している、これを1回だけに、したいのです。
24,25番も、同じく。。28,29,30番も、同じく。