初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 129 1...122123124125126127128129130131132133134135136...260 新しいコメント 削除済み 2018.03.14 01:13 #1281 テスターでテストするシンボルを選択する方法を教えてください。int OnInit(){return(INIT_SUCCEEDED);} Ihor Herasko 2018.03.14 09:48 #1282 Nikolay Gaylis: でテストするために、テスターでシンボルを選択する方法を教えてください。無理でしょう。設定で手動選択するのみ。 テスターでは、もちろん他のシンボルのデータを要求することもできますが、そのためにはデータの同期を確保するために十分に努力する必要があります(テスター自体はそれを行ってくれません、なぜならデフォルトでは1つのシンボルで動作しているからです)。選択されたものとは異なるシンボルでの取引は、一般的に、することはできません。 P.S.すべてMT4用です。MT5では状況が異なります。 削除済み 2018.03.15 00:15 #1283 EAはOnTimer()EventSetTimer(1)で動きますが、多くのティックを逃して しまいます。私は複数の通貨ペアを同時に分析するので、OnTick()イベントは私には適して いません.ループ内でSleep(200) でもシステムに負荷がかかる...どうしたらいい? sedoj88 2018.03.16 12:00 #1284 デコンパイル禁止 Vladislav Boyko 2018.03.16 19:05 #1285 Nikolay Gaylis:Expert AdvisorはOnTimer() EventSetTimer(1)で動作します。 多くのティックを逃して います。私は一度に複数の通貨ペアを分析するので、OnTick()イベントは私には合い ません.ループ内でSleep(200) でもシステムに負荷がかかる...どうしたらいい?また、EventSetMillisecondTimer()もあり、OnTimer()の実行の周期性を短くすることができる。 削除済み 2018.03.17 13:51 #1286 Vladislav Boyko:また、EventSetMillisecondTimer()もあるので、OnTimer()の周期を短くすることができます。ありがとう、やってみるよ...。 Andrei Sabitov 2018.03.17 16:51 #1287 こんにちは。 テスト中、ハイライトされた場所に「Array out of range」というメッセージが表示されます。コンパイル時のエラーを示すものではありません。 エラーの本質と修正方法を教えてください。 double TD_Close=Close[1]; for (int i=2; i<=Period_bars; i++){if (ABS_High<High[i]) ABS_High=High[i];}if (TD_Close>ABS_High){if(OrdersTotal() <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,",magic,0);else newCandle = Time[0];} Questions from Beginners MQL4 How to code? [WARNING CLOSED!] Any newbie Vladislav Boyko 2018.03.17 17:18 #1288 Andrey.Sabitov:こんにちは。テスト中、ハイライトされた場所に「Array out of range」というメッセージが表示されます。コンパイル時のエラーを示すものではありません。 エラーの本質と修正方法を教えてください。double TD_Close=Close[1];for (int i=2; i<=Period_bars; i++){if (ABS_High<High[i]) ABS_High=High[i];}if (TD_Close>ABS_High){if (OrdersTotal () <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,",magic,0);else newCandle = Time[0];}Period_bars は <= Bars - 1 でなければなりません。 Sergei Karev 2018.03.18 12:38 #1289 こんにちは、友人たち、次の問題を解決するのを助けてください:私は簡単なExpert Advisorを書こうとして、次のことに直面しました:SLが0と異なる値に設定されると、取引がまったく開かれず、同様にTP、TStop、TrailingStep関数がまったく機能しません。 コードのどこを直せばいいのでしょうか? //+------------------------------------------------------------------+ //| MA.mq4 | //| Sergey | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "Sergey Karev" #property link "http://www.mql4.com" #property description "Moving Average sample expert advisor" //#property strict #define MAGICMA 23101987 //--- Inputs input double Lots = 0.01; // Объем лота input int SL = 0; // Stop Loss input int TP = 0; // Take profit input int TStop = 0; // Пункты input int TrailingStep = 0; // Шаг TS в пунктах input int MA_per1 = 5; // MA быстрая input int MA_per2 = 55; // MA медленная input int Timeframe = 60; // Таймфрейм input double MaximumRisk = 0.02; input double DecreaseFactor = 3; input int MovingShift = 0; // Cдвиг средней input int Shift = 0; // Сдвиг баров input int Magic_number = 1987; // Если Magic = 0, то работает + ручные ордеры bool TSProfitOnly = true; int NumberOfTry = 5; bool UseSound = True; string NameFileSound = "expert.wav"; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //--- 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++; } } //--- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //--- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //--- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //--- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma1; double ma2; int res; //+------------------------------------------------------------------+ //| Приводим SL и TP к единым целым | //+------------------------------------------------------------------+ double sl=0, tp=0; sl=NormalizeDouble(SL*Point(),_Digits); tp=NormalizeDouble(TP*Point(),_Digits); //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma1=iMA(NULL, Timeframe, MA_per1, MovingShift, MODE_SMMA, PRICE_CLOSE,Shift); ma2=iMA(NULL, Timeframe, MA_per2, MovingShift, MODE_SMMA, PRICE_CLOSE,Shift); // имя символа, таймфрейм, период, сдвиг средней, метод усреднения, тип цены, сдвиг //--- sell conditions if(ma1 < ma2) //[1] - номер свечи { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",MAGICMA,0,Red); return; } //--- buy conditions if(ma1 > ma2) { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",MAGICMA,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma1; double ma2; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma1=iMA(NULL,Timeframe,MA_per1,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); ma2=iMA(NULL,Timeframe,MA_per2,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); //--- for(int 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(ma1 < ma2) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(ma1 > ma2) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //+------------------------------------------------------------------+ //| Trailing Stop / Step | //+------------------------------------------------------------------+ double tr=0, ts=0, op=0, sl=0, ask=NormalizeDouble(Ask,_Digits), bid=NormalizeDouble(Bid,_Digits); tr=NormalizeDouble(TStop*Point(),_Digits); ts=NormalizeDouble(TrailingStep*Point(),_Digits); // Приводим к единым величинам (включая центовые счета) double ma2 = iMA(NULL,Timeframe,MA_per2,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==Magic_number) // Если Magic = 0, то работает + ручные ордеры { op=NormalizeDouble(OrderOpenPrice(),_Digits); sl=NormalizeDouble(OrderStopLoss(),_Digits); if(OrderType()==OP_BUY) { if((bid-op)>tr) if((bid-sl)>tr) if((bid-tr)>ma2) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ma2,_Digits),OrderTakeProfit(),0, clrGreen)==false) Print("Error BUY OrderModify"); } if(OrderType()==OP_SELL) { if((op-ask)>tr) if((sl-ask)>tr || sl==0) if((ask+tr)<ma2) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ma2,_Digits),OrderTakeProfit(),0, clrGreen)==false) Print("Error SELL OrderModify"); } } } } } } //+----------------------------------------------------------------------+ MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader www.mql4.com MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader Nikolai Semko 2018.03.18 14:08 #1290 Sergey_M_K:こんにちは、友人たち、次の問題を解決するのを助けてください:私は簡単なExpert Advisorを書こうとして、次のことに直面しました:SLが0と異なる値に設定されると、取引がまったく開かれず、同様にTP、TStop、TrailingStep関数がまったく機能しません。 コードのどこを直せばいいのでしょうか? デバッガを使用してエラーを検索していますか? 1...122123124125126127128129130131132133134135136...260 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
でテストするために、テスターでシンボルを選択する方法を教えてください。
無理でしょう。設定で手動選択するのみ。
テスターでは、もちろん他のシンボルのデータを要求することもできますが、そのためにはデータの同期を確保するために十分に努力する必要があります(テスター自体はそれを行ってくれません、なぜならデフォルトでは1つのシンボルで動作しているからです)。選択されたものとは異なるシンボルでの取引は、一般的に、することはできません。
P.S.すべてMT4用です。MT5では状況が異なります。
デコンパイル禁止
Expert AdvisorはOnTimer() EventSetTimer(1)で動作します。 多くのティックを逃して います。私は一度に複数の通貨ペアを分析するので、OnTick()イベントは私には合い ません.ループ内でSleep(200) でもシステムに負荷がかかる...どうしたらいい?
また、EventSetMillisecondTimer()もあり、OnTimer()の実行の周期性を短くすることができる。
また、EventSetMillisecondTimer()もあるので、OnTimer()の周期を短くすることができます。
ありがとう、やってみるよ...。
こんにちは。
テスト中、ハイライトされた場所に「Array out of range」というメッセージが表示されます。コンパイル時のエラーを示すものではありません。 エラーの本質と修正方法を教えてください。
double TD_Close=Close[1];
for (int i=2; i<=Period_bars; i++)
{
if (ABS_High<High[i]) ABS_High=High[i];
}
if (TD_Close>ABS_High)
{
if(OrdersTotal() <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,",magic,0);
else newCandle = Time[0];
}
こんにちは。
テスト中、ハイライトされた場所に「Array out of range」というメッセージが表示されます。コンパイル時のエラーを示すものではありません。 エラーの本質と修正方法を教えてください。
double TD_Close=Close[1];
for (int i=2; i<=Period_bars; i++)
{
if (ABS_High<High[i]) ABS_High=High[i];
}
if (TD_Close>ABS_High)
{
if (OrdersTotal () <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,",magic,0);
else newCandle = Time[0];
}
Period_bars は <= Bars - 1 でなければなりません。
こんにちは、友人たち、次の問題を解決するのを助けてください:私は簡単なExpert Advisorを書こうとして、次のことに直面しました:SLが0と異なる値に設定されると、取引がまったく開かれず、同様にTP、TStop、TrailingStep関数がまったく機能しません。
コードのどこを直せばいいのでしょうか?
こんにちは、友人たち、次の問題を解決するのを助けてください:私は簡単なExpert Advisorを書こうとして、次のことに直面しました:SLが0と異なる値に設定されると、取引がまったく開かれず、同様にTP、TStop、TrailingStep関数がまったく機能しません。
コードのどこを直せばいいのでしょうか?