記事"MQL5でExpert Advisorを書くための初心者向けステップバイステップガイド"についてのディスカッション - ページ 27

 
Rustam Ayupov #:

親愛なるウラジミール!私の優先順位は変わりつつあり、デモ取引は独自の方法で行うことになり、現在の主なものは初心者向けのあなたの学校です。私はこのEAにトレイリングストップを挿入する方法に到達した場合、私はおそらく優先順位としてそれを行います、前方最適化の結果として、EAは長いtakeprofitsを作成するため、彼らのセーフティネットは悲鳴となっている。そして、あなたの学校でのトレーニングの過程で、私はおそらく間違いを見ることを学ぶでしょう、それなしでは動作するプログラムはありません、そしてそれらを修正します。ありがとうございました。

敬具、ルスタム。

どういたしまして、ルスタム!

敬意を込めて、ウラジーミル

 
Valeriy Yastremskiy #:

返信」または「新規コメント」、一番下にある「ファイルを添付する」。

そして質問ですが、あなたのトレーリング経験で、このEAにこれらをどのように挿入しますか?

 
MrBrooklin #:

頼むよ、ルスタム!

ウラジーミル

私は、エキスパート-アドバイザ、著者自身のユニークな、シンプルで天才的な、 "トレイリングメソッド "を発見し、この開発のための伝統的であるように、著者がコメントしたように実行されていません。彼は、私のように、おそらくまた、ダミーですが、大きなものです)彼は、価格が反転したときに、以前にオープンしたポジションがクローズされることを約束し、まあ、はい、それはそうだったら素晴らしいだろう...しかし、2つだけオープンポジションは、両方向に、ぶら下がっており、クローズされません。あなたの最初のアドバイスの前には、両方向にオープンポジションがあり、それらはクローズされていなかった。ケーキの上のこのチェリーを絞ってみる?

 
Rustam Ayupov #:

そして質問ですが、あなたのトレーリングの経験を活かして、このEAにどのようにトレーリングを挿入しますか?

もし、トレイリングがある方がないよりも結果が良いのであれば、そのままにしておいてください。

 
Valeriy Yastremskiy #:

もし、トロールを使わない場合よりも使った場合の方が結果が良いのであれば、そのままにしておく。

挿入するのは難しくないが、何を挿入するのか?テストして評価すること。

 
Rustam Ayupov #:

入れるのは難しくないが、何を入れるのか?試してみる。

trawlコードをtrawlなしでEAに入れる。trawlのコードは関数に入れたほうがいい。そして、注文があれば、条件によってトロールを呼び出す。

 
Rustam Ayupov #:

私は、エキスパート-アドバイザーのユニークな、シンプルで天才的な、 "トレーリングメソッド "を発見し、著者自身は、この開発のための伝統的であるように、著者がコメントしたように実行されていません。彼は、私のように、おそらくまた、ダミーですが、大きなものです)彼は、価格が反転したときに、以前にオープンしたポジションがクローズされることを約束し、まあ、はい、それがあれば素晴らしいだろう...しかし、2つだけオープンポジションがぶら下がっている、両方向で、クローズされません。あなたの最初のアドバイスの前には、両方向にオープンポジションがあり、それらはクローズされていなかった。ケーキの上のこのチェリーを絞ってみる?

こんにちは、ルスタム!私たちが生産的に協力し続けるためには、まず、問題のあるEAコードをメッセージに添付する方法を学ぶ必要があります。EAのテスト中に問題が発生した場合、このコードを新しい名前で保存し、コンパイルしてからメッセージに添付する必要があります。EAを新しい名前で保存し、コンパイルする必要があります そうでないと、あなたと連絡を取る際に、異なるバリエーションで混乱してしまいます。

何らかの理由でEAのコードを添付できない場合は、別の方法を使うことができます:

  1. MetaEditorで、Ctrl+Aを押して 問題のあるEAコードをハイライトします。
  2. Ctrl+C ボタンでEAコードをコピーします。
  3. フォーラムに投稿したい記事を作成し、AL+S ボタンでコピーしたコードを貼り付けるフィールドを開きます。
  4. フォーラムに投稿を追加する

あなたの投稿に問題のあるEAのコードを添付または配置することを学ばなければ、あなたとのさらなる対話は無駄になります。

ウラジミール。

 
MrBrooklin #:

こんにちは、ルスタム!私たちが生産的に協力し続けるためには、まず問題のあるEAコードをメッセージに添付する方法を学ぶ必要があります。EAのテスト中に問題が発生した場合、このコードを新しい名前で保存し、コンパイルしてからメッセージに添付する必要があります。EAを新しい名前で保存し、コンパイルする必要があります そうでないと、あなたとのコミュニケーションにおいて、あなたと私が異なるバリアントで混乱することになります。

何らかの理由でEAのコードを添付できない場合は、別の方法を使うことができます:

  1. MetaEditorで、Ctrl+Aを押して 問題のあるEAコードをハイライトします。
  2. Ctrl+C ボタンでEAコードをコピーします。
  3. フォーラムに投稿したい記事を作成し、AL+S ボタンでコピーしたコードを貼り付けるフィールドを開きます。
  4. フォーラムにメッセージを追加する

EAコードを投稿に添付したり、問題点を投稿する方法を学ばなければ、あなたとのさらなる対話は無駄になります。

よろしく、ウラジミール。

遅れて申し訳ありませんが、私は週末に燃え尽きたが、それはブローカーFXopenが判明したように、最後の問題の原因を発見し、ちょうどMT5に成長しませんでした。よく、送信するために、ファイル選択のシンプルさを教えてくれました。最初の2つは、作者の仕事を最適化したもので、作者がコードに不注意で、ポジションを大量にオープンするのを止めたものです。第二は、すべての後に、著者は、終了していない場合、取り組む価値があるが、有益にしたかった)。

ファイル:
 
Rustam Ayupov #:

遅れて申し訳ありませんが、週末に24時間、燃え尽きたが、それはブローカーFXopenが判明したように、最後の問題の原因を発見し、ちょうどMT5に育っていませんでした。まあと送信するために、ファイル選択のシンプルさを教えてくれました。最初の2つは、著者の仕事のあなたの最適化であり、1つ、単一の代わりに、ポジションの大規模なオープンで、コード内の著者の不注意を停止し、2番目の2つは、価格が反転したときにポジションを閉じる彼の宣言である。第二は、すべての後に、著者は、終了していない場合、取り組む価値があるが、有益にしたかった)。

まあこれで、最後の1つは、私はまだそれを整理している、何かを理解し、長いtakeprofitsの保険にしながら、その中にナビゲートを開始しようとしている。私はすでに、将来における著者の驚きに備える準備ができている。)

ファイル:
 
Rustam Ayupov #:

まあ、この最後の作品については、私はまだ何かを理解しようとしているし、長い利益をヘッジするために、当分の間、その中で自分自身を方向付け始めている。この先、著者がどんなサプライズを仕掛けてくるか、すでに覚悟はできている。)

こんにちは、ルスタム!このExpert Advisorの作業バージョンをメッセージの一番下に添付します。この部分に変更を加えました:

//--- すべてをまとめる 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // 即時注文の実行
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // 最新の売値
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // ストップ・ロス
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // テイクプロフィット
         mrequest.symbol = _Symbol;                                            // 通貨ペア
         mrequest.volume = Lot;                                                 // 取引ロット数
         mrequest.magic = EA_Magic;                                             // 注文マジックナンバー
         mrequest.type = ORDER_TYPE_BUY;                                        // 購入オーダー
         mrequest.type_filling = ORDER_FILLING_FOK;                             // 注文の実行タイプ
         mrequest.deviation=100;                                                // 現在価格との乖離
         //--- オーダーを送信する
         bool check=OrderSend(mrequest,mresult);
         // 結果コードを取得する
         if(mresult.retcode==10009 || mresult.retcode==10008) //リクエスト完了または注文
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2.MA-8が下向きに減少、
 前日終値がそれより下、ADX > 22、-DI > +DI
*/.
//--- 売り条件を格納するためのbool型変数を宣言する。
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // 減少するMA-8
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // 前日終値がMA-8を下回る
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // 現在のADX値が最小値(22)より大きい
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // DIは+DIより大きい

//--- すべてをまとめる
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // 即時注文の実行
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // 最新の入札価格
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // ストップ・ロス
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // テイクプロフィット
         mrequest.symbol = _Symbol;                                          // 通貨ペア
         mrequest.volume = Lot;                                              // 取引ロット数
         mrequest.magic = EA_Magic;                                          // 注文マジックナンバー
         mrequest.type= ORDER_TYPE_SELL;                                     // 売り注文
         mrequest.type_filling = ORDER_FILLING_FOK;                          // 注文の実行タイプ
         mrequest.deviation=100;                                             // 現在価格との乖離
         //--- オーダーを送信する
         bool check=OrderSend(mrequest,mresult);
         // 結果コードを取得する
         if(mresult.retcode==10009 || mresult.retcode==10008) //リクエスト完了または注文
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

黄色でハイライトした部分を追加しました:

&& PositionsTotal()==0

また、Buy_openedとSell_openedに関連する条件を削除しました:

         // 買いポジションがあるか?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // 新しい買いポジションを開かない
           }
.
.
.
         // 売りポジションはあるか?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // 新規売りポジションを建てない
           }

ありがとう、ウラジミール。

ファイル: