//+------------------------------------------------------------------+//| RSI_strategy_cyxstudio.mq4 |//| Copyright 2013, Tjipke de Vries |//| https://forum.mql4.com/53695/ |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externint RSIPeriod = 3; //number of periods for RSI//WHY DIDN't YOU LEAVE THIS VALUE 3 externdouble UpperBound = 90; //set upper bound value for RSI//WHY DID YOU MAKE THIS TO 95externdouble LowerBound = 5; //set lower bound value for RSIexternint MASlowPeriod = 200;
externint MAFastPeriod = 5;
externdouble Lots = 0.1;
externdouble StopLoss = 60; //Set the stop loss levelexterndouble TakeProfit = 120; //Set the take profit levelexterndouble TrailingStop = 40;
//extra settings for OrderSendexternint MagicNumber = 54333;
externstring CommentEA = "RSI strategy";
externint Slippage.Pips = 3;
int BUYS=1,SELLS=1; //WHY DID YOU REMOVE THIS FROM YOUR CODE//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.015 0.0150intDigits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips)//---//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//---- if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10; Digits.pips = 1;}
else {pips2dbl = Point; pips2points = 1; Digits.pips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //WHY DID YOU REMOVE THIS //---- //?? Alert(OrdersTotal()); //WHAT IS THIS DOING HERE THIS IS NOT IN MY CODE//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----int Ticket;
double SL,TP;
int Total;
double pAsk = MarketInfo(Symbol(), MODE_ASK);
double pBid = MarketInfo(Symbol(), MODE_BID);
double MA200 = iMA(NULL, 1440, MASlowPeriod, 0,MODE_SMA,PRICE_CLOSE, 0); //200 day Moving Average double MA5 = iMA(NULL, 1440, MAFastPeriod, 0,MODE_SMA,PRICE_CLOSE, 0); // 5 day Moving Averagedouble CurrentRSI = iRSI (NULL, 1440, RSIPeriod,PRICE_CLOSE ,0);
//WHY DID YOU MAKE PrevRSI and LastRSI REMOVE IT IT IS NOT IN MY CODE
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if(OrdersTotal()<1) // WHY DID YOU REMOVE THIS
{
BUYS=0;
SELLS=0;
}
これは私の最新のコードです。私が望む結果を得られない以外は、何も間違っていないと思います。
//+------------------------------------------------------------------+ //| RSI_strategy_cyxstudio.mq4 | //| Copyright 2013, Tjipke de Vries | //| https://forum.mql4.com/53695/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #include <stderror.mqh> #include <stdlib.mqh> extern int RSIPeriod = 2; //number of periods for RSI extern double UpperBound = 95; //set upper bound value for RSI extern double LowerBound = 5; //set lower bound value for RSI extern double Lots = 0.1; extern double StopLoss = 60; //Set the stop loss level extern double TakeProfit = 120; //Set the take profit level extern double TrailingStop = 40; //extra settings for OrderSend extern int MagicNumber = 54333; extern string CommentEA = "RSI strategy"; extern int Slippage.Pips = 3; //--- //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Alert(OrdersTotal()); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int Ticket1; int Ticket2; bool Ticket3; bool Ticket4; double SL,TP; int Total; double MagicNo; double Slippage; int cnt; double pAsk = MarketInfo(Symbol(), MODE_ASK); double pBid = MarketInfo(Symbol(), MODE_BID); double MA200 = iMA(NULL, 1440, 200, 0,MODE_SMA,PRICE_CLOSE, 0); //200 day Moving Average double MA5 = iMA(NULL, 1440, 5, 0,MODE_SMA,PRICE_CLOSE, 0); // 5 day Moving Average double CurrentRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,0); double PrevRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,1); double LastRSI = iRSI (NULL, 0, RSIPeriod,PRICE_CLOSE ,2); if(Bars<100) { Print("bars less than 100"); return(0); } if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //Check for open orders if there are none then check for conditions to open one if (OrdersTotal() ==0 && LastRSI > PrevRSI && PrevRSI > CurrentRSI && CurrentRSI < LowerBound && pAsk > MA200) { //Condition to execute buy entry Ticket1 = OrderSend(Symbol(), OP_BUY, Lots, pAsk, Slippage.Pips, pBid - ( StopLoss * Point ), pAsk + ( TakeProfit * Point ), "Buy.", MagicNumber,0,Yellow); //execute buy order if(Ticket1>0) { if(OrderSelect(Ticket1,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } if (Ticket1 < 0) { Print("Error opening BUY order : ",GetLastError()); return(0); } if (OrdersTotal() ==0 && LastRSI < PrevRSI && PrevRSI < CurrentRSI && CurrentRSI > UpperBound && pBid < MA200) { //Condition to execute sell entry Ticket2 = OrderSend(Symbol(), OP_SELL, Lots, pBid, Slippage.Pips, pAsk + ( StopLoss * Point ), pBid - ( TakeProfit * Point ), "Sell.",MagicNumber, 0, Yellow) ; //execute sell order if(Ticket2>0) { if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } if (Ticket2<0) { Print("Error opening SELL order : ",GetLastError()); return(0); } } } int ticket=OrderTicket(); double lots=OrderLots(); for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY && pBid > MA5) { Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips); if (Ticket3 == true ) { Print("BUY position closed", OrderClosePrice()); } if (Ticket3 == false) { Print("Error closing BUY position", ErrorDescription(GetLastError())); } } if (OrderType() == OP_SELL && pBid < MA5) { Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips); if (Ticket4 == true ) { Print("SELL position closed", OrderClosePrice()); } if (Ticket4 == false) { Print("Error closing SELL position", ErrorDescription(GetLastError())); } } } } } return(0); }このトピックの2ページ目をご覧いただくと、私がお渡ししたものが掲載されています。
これが始まりです......。
自分のコメント......今までと何が違うのか......を書いてください。
それから、https://www.mql5.com/en/forum/139654 を読んで、トレードをチェックするカウントダウンのループを作ってみてください。
あなたが見ることができるように、私は取引をチェックするダウンカウントループを作るように頼んだ。
それはコードの中の私の次のステップです。
私はコードのその部分のためにあなたに尋ねる
買いトレードと売りトレードを別々にカウントしてください。
このトピックの2ページ目をご覧いただくと、私がお渡ししたものが掲載されています。
私はそれを使用する方法を知らなかったので、私はそれを削除しました。あなたは私にコードを与えたが、私はそれがどのように機能 するか見ることができませんでした。
--
これが始まりです......。
自分のコメント......今までと何が違うのか......を教えてください。
それから、https://www.mql5.com/en/forum/139654 を読んで、トレードをチェックするカウントダウンのループを作ってみてください。
ご覧の通り、トレードをチェックするカウントダウンのループを作るよう依頼しました。
それはコードの中の私の次のステップです。
私はコードのその部分のためにあなたに尋ねる
それは別々に買い取引と売り取引をカウントするようにします。
このように?
int ticket=OrderTicket();//実行するコードのブロック
}
私はそれを使用する方法を知らなかったので、それを削除しました。
EAが再スタートする瞬間
BUYSが1に設定されます。
売りが1に設定されます
OrdersTotal()は、あなたの口座のすべてのオープントレードの合計を表示します。
ゼロであれば未決済であり、このEAの取引があるかどうかを確認 する必要はありません。
OrdersTotal() > 0 BUYSは1を維持し、SELLSは1を維持 する場合
この場合、EAの取引かどうか確認する必要があり、異なるタイプ(買い、売り、買い限度...)を数える必要があります。
ということで
このように?
int ticket=OrderTicket();//実行するコードのブロック
}
SRCボタンを使用する
このループは開始するだけです(どのような条件のために)。
ループの中で選択されたトレードが買いか売りかどうやって知るのですか?
そして、どのようにそれらを数えるのですか?
SRCボタンを使用する
このループは開始するだけです(どのような条件のために)。
ループの中で選択されたトレードが買いか売りかどうやって知るのですか?
そして、どのようにそれらを数えるのですか?
ということです。
if (OrderType() == OP_BUY && pBid > MA5) { Ticket3 = OrderClose(ticket, lots, pBid, Slippage.Pips); if (Ticket3 == true ) { Print("BUY position closed", OrderClosePrice()); } if (Ticket3 == false) { Print("Error closing BUY position", ErrorDescription(GetLastError())); } } if (OrderType() == OP_SELL && pBid < MA5) { Ticket4 = OrderClose(ticket, lots, pAsk, Slippage.Pips); if (Ticket4 == true ) { Print("SELL position closed", OrderClosePrice()); } if (Ticket4 == false) { Print("Error closing SELL position", ErrorDescription(GetLastError())); } } }クローズド・トレードの関数に
を使って
if (OrderType() == OP_SELL && pBid < MA5)を使って売買を区別しています。
注文を開始するための条件に何か問題がありますか?
それを削除して、決済機能で使用したループに置き換えるべきですか?
対戦相手
クローズド・トレードの機能に対して
売買の区別のため
を使い、売りと買いを区別する。
注文を開始するための条件に何か問題がありますか?
それを削除して、決済機能で使用したループに置き換える必要がありますか?
このとき、すでに取引が開始されているかどうかを確認 する必要があります。
取引を開始する前に、取引が開始されているかどうかを知る必要があります。
取引数をカウントしているのが見えません。
.
メタトレーダー・ステーションの 移動平均EAの コードを見て、それがどのように行われるかを見てください ....