MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1653 1...164616471648164916501651165216531654165516561657165816591660...1953 新しいコメント Volodymyr Zubov 2021.10.08 16:04 #16521 テスターの場合、この OrderSend は、高速なサーバーでも動作しますが、テスターでない場合は、ドキュメントにしたがって行う方が良いでしょう :) Artis98 2021.10.08 16:12 #16522 みんな、助けが必要だ。ここ数日、次のコードに必要な変更を加えることができない。 void start() { StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Определение направления пересечения мувингов if (Init) InitMetod(); // Трейлинг стоп открытых позиций if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа CheckForOpen(); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res; // Считывание параметров индикаторов malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); // Проверяем положение мувмнгов if(malw>mas1 && malw>mas2 && OrderSell) { OrderBuy=true; OrderSell=false; Order=true; } if(malw<mas1 && malw<mas2 && OrderBuy) { OrderBuy=false; OrderSell=true; Order=true; } // Открываем ордер Buy if(macd>0 && OrderBuy && Order) { res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue); Order=false; return; } // Открываем ордер Sell if(macd<0 && OrderSell && Order) { res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red); Order=false; return; } } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lots() // Расчет объема лота { double Lots; if (Lot > 0) return(Lot); Lots=AccountFreeMargin()/5000; Lots=MathMin(15,MathMax(0.01,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); } //+------------------------------------------------------------------+ //| Init metod Puria function | //+------------------------------------------------------------------+ void InitMetod() // Опредеоение начального пересечения мувингов { double malw,mas1,mas2; malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2)) { Init=false; OrderBuy=true; OrderSell=true; } return; }実は、私が試したものの、ここに追加できなかったのは、すべての指標条件(ローソク足の始値)が一致した後、EAにローソク足の始値を4本連続で待機 させることです。 1.ローソク足1本目の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた-4本中1 本の確認は; 2.ローソク足2本目の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4本中2本の確認は; 3.MACDが0より上に開いた-4本中1本の確認は: 3番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーが0を超えてオープン- 4確認のうち3 はい; 4。 4番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーは0を超えてオープン- 4確認のうち4はい- 同じキャンドルで購入するオープントレード(4日)。 売り 注文と同じ状況で、唯一の他の方向で指標を開く必要があります。そして、重要なポイントがあります -例えば、4日に1番目のろうそくの任意の段階で、 指標は、その位置を 変更 する場合(例えば、3番目のオープニングキャンドルで、MACDバーは0以下のいずれか、または= 0)を開き -信号が連続して4番目のろうそくのオープニングでチェックされていないため、次に、すべてがリセット されます。 経験豊富なプログラマーの方、これらの条件を動作させるには、コードのどこを変更する必要があるか、アドバイスお願いします。いろいろ試したけど、よくわからない......。 Volodymyr Zubov 2021.10.08 16:25 #16523 if(malw>mas1 && malw>mas2 && OrderSell) 諺にもあるように、私たちの言葉を鵜呑みにしないでください。 OrderSell 何が入っているかは分からないが、判断のロジックをコードで共有する。 Tretyakov Rostyslav 2021.10.08 16:43 #16524 artem artem #: 第1ロウソクの始値 - (5)以上(75)と(85)+ MACDバーが0を超えてオープン -4つの確認のうち1つは、はい。 2 2本目のロウソクの始値 - (5)が(75)と(85)以上 + MACDバーが0を超えて開いた- 4つの 確認のうち2 つははい。 3 3本目のローソク足の始値-(5)が(75)と(85)を超えた+MACDバーが0を超えて開いた- 4本中3本が 確認された場合。 4 4本目のローソク足の始値 - (5)が(75)と(85)を超えた+MACDバーが0を超えて開いた- 4本中4本がイエス- 同じローソク足(4本目)で買いのオープントレードを 行う。 //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(CheckForOpen()==0) { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK"); } if(CheckForOpen()==1) { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK"); } } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4) res=0; if(sell==4) res=1; return(res); } Volodymyr Zubov 2021.10.08 17:11 #16525 malw ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。 Tretyakov Rostyslav 2021.10.08 17:13 #16526 Volodymyr Zubov #:ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。 これは誰に向けて書かれたものなのか、あるいは何に向けて書かれたものなのか。 Volodymyr Zubov 2021.10.08 17:15 #16527 コードにmalw、そこでロジカルエラーが出ることが判明しました。 Tretyakov Rostyslav 2021.10.08 17:16 #16528 Volodymyr Zubov #: コードの中に論理的な間違いがあることがわかりました。 書く前に確認すること Volodymyr Zubov 2021.10.08 17:17 #16529 しかし、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなります Tretyakov Rostyslav 2021.10.08 17:19 #16530 Volodymyr Zubov #:OKですが、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなってしまいます。 他の選択肢を知っているのなら、それを書いてください...。 人を助けることができる) 1...164616471648164916501651165216531654165516561657165816591660...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
テスターの場合、この
OrderSend
は、高速なサーバーでも動作しますが、テスターでない場合は、ドキュメントにしたがって行う方が良いでしょう :)
実は、私が試したものの、ここに追加できなかったのは、すべての指標条件(ローソク足の始値)が一致した後、EAにローソク足の始値を4本連続で待機 させることです。
1.ローソク足1本目の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた-4本中1 本の確認は;
2.ローソク足2本目の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4本中2本の確認は;
3.MACDが0より上に開いた-4本中1本の確認は: 3番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーが0を超えてオープン- 4確認のうち3 はい;
4。 4番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーは0を超えてオープン- 4確認のうち4はい- 同じキャンドルで購入するオープントレード(4日)。
売り 注文と同じ状況で、唯一の他の方向で指標を開く必要があります。そして、重要なポイントがあります -例えば、4日に1番目のろうそくの任意の段階で、 指標は、その位置を 変更 する場合(例えば、3番目のオープニングキャンドルで、MACDバーは0以下のいずれか、または= 0)を開き -信号が連続して4番目のろうそくのオープニングでチェックされていないため、次に、すべてがリセット されます。
経験豊富なプログラマーの方、これらの条件を動作させるには、コードのどこを変更する必要があるか、アドバイスお願いします。いろいろ試したけど、よくわからない......。
if(malw>mas1 && malw>mas2 && OrderSell)
諺にもあるように、私たちの言葉を鵜呑みにしないでください。
OrderSell
何が入っているかは分からないが、判断のロジックをコードで共有する。
artem artem #:
第1ロウソクの始値 - (5)以上(75)と(85)+ MACDバーが0を超えてオープン -4つの確認のうち1つは、はい。
2 2本目のロウソクの始値 - (5)が(75)と(85)以上 + MACDバーが0を超えて開いた- 4つの 確認のうち2 つははい。
3 3本目のローソク足の始値-(5)が(75)と(85)を超えた+MACDバーが0を超えて開いた- 4本中3本が 確認された場合。
4 4本目のローソク足の始値 - (5)が(75)と(85)を超えた+MACDバーが0を超えて開いた- 4本中4本がイエス- 同じローソク足(4本目)で買いのオープントレードを 行う。
ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。
ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。
コードの中に論理的な間違いがあることがわかりました。
しかし、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなります
OKですが、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなってしまいます。
他の選択肢を知っているのなら、それを書いてください...。
人を助けることができる)