2016年5月27日金曜日

【EAを作ろう】第八回 他通貨設定を楽にしよう

作成しているRSIプログラムですが、
StopLoss、TakeProfit共に 0.01にしています。
USDJPYやEURJPYでは1Pipsです。
ところがEURUSDでは100Pipsになってしまいます。
桁数が異なるからです。

通貨ペアが異なれば設定値は変わりますが、同じような桁で考えたいと思うのは人の常

そこでPointを使います。
Pointは少数3ケタの通貨ペアでは0.001
5桁の通貨ペアでは0.00001になります。

extern int UpperLine=70,LowerLine=30,RSIPeriod=20,StopLoss=10,TakeProfit=10,Magic=747;
extern ENUM_APPLIED_PRICE AppliedPrice=0;
double SL,TP;
int OnInit(){
SL=StopLoss*Point;
TP=TakeProfit*Point;
return(INIT_SUCCEEDED);}

void OnTick(){        
  if(OrdersTotal()==0)  {
    if(RSI()>UpperLine){EntryShort();}
    if(RSI()<LowerLine){EntryLong();}
  }
}

double RSI(){return(iRSI(Symbol(),PERIOD_CURRENT,RSIPeriod,AppliedPrice,1));}
void EntryLong(){int d=OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Ask-SL,Ask+TP,"Long",Magic,0,clrNONE);}
void EntryShort(){int d=OrderSend(Symbol(),OP_SELL,0.1,Bid,0,Bid+SL,Bid-TP,"Short",Magic,0,clrNONE);}



行数が長いと見にくいので短くしました。
extern intを、カンマで並列記述
double RSI()は理解のためにrに一度入れていましたが直接return()へ記述
void Entry~の改行を減らしました。

こうやって自分勝手な見にくいソースができていくのですが、ブログでは短いほうがいいと思いますのでご理解ください。

少数3ケタ、5ケタのブローカ向けです。(2桁4桁のブローカーまだあるのかな?)
水色のStopLoss,TakeProfitはdoubleで0.01としていましたがint で10にしました。
黄色の戦闘でSL,TPをdoubleで宣言
OnInitで前処理として SLはStopLoss 掛ける Point、TPはTakeProfit 掛ける Pointとしています。
USDJPYの場合 StopLossは10 Pointは0.001 ですのでSLは0.01      1Pips
EURUSDの場合 StopLossは10 Pointは0.00001 ですのでSLは0.0001  1Pips
と両方1Pipsになりました。


だれか、どの通貨ペアで、どの設定が最適か教えて下さいw








0 件のコメント:

コメントを投稿