メタトレーダー
初歩的な質問ですみませんが、どなたか教えてください。メタトレーダーのEAプログラムについてです。
(1) エントリー時に移動平均線の傾きの角度を制限したいので下記のようにしました。
extern double MA_Period = 20; // MAの足数
extern double kaikatamuki = 40; //買いのMA逆傾き制限(%)必ず99以下で
extern double urikatamuki = 40; //売りのMA逆傾き制限(%)必ず99以下で
~ ここに色々式がありまして・・・・ ~
//MA傾きの計算
ma1 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j);
ma2 = iMA(NULL, 0, MA_Period,0, MODE_SMA, PRICE_CLOSE, j+1);
katamuki1 = ma1/ma2*100;
katamuki2 = ma2/ma1*100;
//katamuki1 = ma1-ma2;←これは差を求めるために作っただけ
//katamuki2 = ma2-ma1; ←これは差を求めるために作っただけ
//オープンポジションの計算
int pos = CalculateCurrentOrders();
//売りシグナル
if (pos>=0 && k==llb && katamuki1<kaikatamuki)
{
ClosePositions();
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+TrailingStop1*Point,Bid-TakeProfit*Point,””,MAGIC,0,Red);
return(0);
}
//買いシグナル
if (pos<=0 && k==hhb && katamuki2<urikatamuki)
{
ClosePositions();
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-TrailingStop1*Point,Ask+TakeProfit*Point,””,MAGIC,0,Blue);
return(0);
}
しかし、compileはできたのですが、実際のバックテストでは約定しません。kaikatamukiとurikatamukiを100以上にすれば約定するのですが、理屈が反対になるのでダメです。また、大きい傾き時のみのエントリーを計画しているのですが、傾きが緩やかな時も約定してしまいます。何が間違っているのでしょうか?または、傾きの有る無いしか作れないのでしょうか?
(2)上記にあるOrderSendのStopLossの所にTrailingStopを最初から適用すると約定しません。StopLossを入れると約定します。上記ではTrailingStop1となっていますが、1をつけなくてもダメでした。私としてはOrderSendで TrailingStop を入れて、ある一定の利益が出たらOrderModifyで新たな TrailingStopを設定したいと思っていました。これはダメなんでしょうか?
(3)上記とは違いますが例えば、Supersignalの矢印が出てから何本目の足以内にMACDCrossが出たらエントリーというような、「これが成立してから足何本以内にこれが成立したら」が書けません。forexでstatic int barsAtStart;を見つけましたが、これまた動きません。
長々と申し訳ありません。よろしくお願いいたします。