複数時間のRSIで判定します。
関数を活用したい為のすこし強引な展開ですw
extern int UpperLine=70,LowerLine=30,RSIPeriod=20,StopLoss=10,TakeProfit=90,Magic=747;
extern ENUM_APPLIED_PRICE AppliedPrice=0;
extern ENUM_TIMEFRAMES ShortTimeFrames=1;
extern ENUM_TIMEFRAMES LongTimeFrames=5;
double SL,TP;
int OnInit(){
if (Digits == 2|| Digits == 4)
{
SL=StopLoss * Point * 0.1;
TP=TakeProfit* Point * 0.1;
}
else
{
SL=StopLoss*Point;
TP=TakeProfit*Point;
}
return(INIT_SUCCEEDED);}
void OnTick(){
if(OrdersTotal()==0) {
if(RSI(ShortTimeFrames)>UpperLine&&RSI(LongTimeFrames)>UpperLine){EntryShort();}
if(RSI(ShortTimeFrames)<LowerLine&&RSI(LongTimeFrames)>UpperLine){EntryLong();}
Comment(TP,SL);
}
}
double RSI(int Periods){return(iRSI(Symbol(),Periods,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);}
利益が出ないと面白くないのでTakeProfitを90にしました♪
(最適値募集中ですよ!)
いままではRSI()でしたがRSI(ShortTimeFrames)もしくはLong~となっています。
初期設定ではShort~は1 Long~は5ですので
RSI(1) と RSI(5) という意味合いになります。
オレンジ色の&&はAND 両方の条件が真の時という意味です。
水色は受け取り用にint Periodsを宣言 iRSIの期間をPeriodsにしています。
RSI(ShortTimeFrames)を追っかけてみましょう
RSI(ShortTimeFrames)はTimeFramesはデフォルトで1ですのでRSI(1)と言う意味になります。
この1は水色のところでPeriodsに格納されます。Periodsは1です。
iRSIの期間のところもPeriodsになっています。iRSIの期間1の値がRSI(ShortTimeFrames)に入ります。
同様にRSI(LongTimeFrames)はiRSIの期間5の値が入ります。
RSI(ShortTimeFrames)とRSI(LongTimeFrames)の両方がUpperLineより大きい時にEntryShort()を呼び出します。
※RSIを二重にすることで精度が上がりますが取引回数は下がります。
損益は一回取引の平均利益 x 取引回数ですので、平均と取引回数をうまくコントロールしないと利益はでません
そしてこの設定の場合 勝率10%ちょいですが利益が出ますw
損益は一回取引の平均利益 x 取引回数ですので、平均と取引回数をうまくコントロールしないと利益はでません
そしてこの設定の場合 勝率10%ちょいですが利益が出ますw
0 件のコメント:
コメントを投稿