[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 470

 
tol64:

多通貨のパラメータはどのように最適化するのですか?MT4テスターでは、一度に複数のシンボルをテストすることはできませんが...。多通貨の方を考えていて、今のところ、各シンボルに対して別々にパラメータを最適化し、そのパラメータをすべて多通貨モードのExpert Advisorに転送するという考えに至っています。

私は正しい方向に進んでいるのか、それとも実際はもっと簡単なのか......)

mql5では、すべてを1つのEAに実装してテストとトレードができるのですが、今はmql4を勉強することにしました。

いくつかのシンボルを一度にテストできないなら、各シンボルチャートのコピーを自分で設定すれば同じになるなら、わざわざ1つのEAにする必要はないだろうと思った次第です。コミュニティメンバーの意見を聞いてみたい)))

多通貨ではなく、各商品に同じEAをぶら下げているだけです。
 
Roman.:

返書
すみません、回答が分かりませんでした
 
demlin:
申し訳ありませんが、回答が理解できません。

googleで「how to optimise a site:mql4.com」と検索してください。以下の書籍はこちらでも ご覧いただけます:「エキスパートアドバイザーの最適化方法 site:mql4.com」、こちらでもご覧 いただけます:「エキスパートアドバイザーの最適化方法 site:mql4.com」、こちらでも ご覧いただけます。

このテーマについては、ラルフ・ビンス著「ストック・トレーダーのためのトレーディング・システムの開発、テスト、最適化」-すべて詳細に書かれている-という良書をお勧めします。

 

問題:図は曲線(例:MA)を示している。点A,C,Eはローカルマックス、点B,Dはローカルミニマム。質問:最も近い最大値と最小値の間の距離がN点以上ある場合、どのように計算するのでしょうか?やってみたのですが、どうも面倒くさそうです。もしかしたら、このような問題を解決するためのアルゴリズムが用意されているかもしれませんね。どなたかご経験のある方、アドバイスお願いします。

 
Elenn:

問題:図は曲線(例:MA)を示している。点A,C,Eはローカルマックス、点B,Dはローカルミニマム。質問:最も近い最大値と最小値の間の距離がN点以上ある場合、どのように計算するのでしょうか?やってみたのですが、どうも面倒くさそうです。もしかしたら、このような問題を解決するためのアルゴリズムが用意されているかもしれませんね。経験者の方、アドバイスお願いします。


滑走方向の判定。

もしupで変数B,C,D,Eが空なら、変数Aに移動角度の現在値を入力する。

変数Aが空でなく、スライド方向が下向きで、変数C,D,Eが空の場合、変数Bにスライド指標の現在値が入力される。変数A、変数Bが空でなく、移動平均が上向きで、変数D、変数Eが空の場合、変数Cに移動平均の現在値を入れる。

などと、変数の値を値で埋めていく。

さて、変数AとCが空でなく、AとCの差のモジュラスがあらかじめ決められた点数以上であれば、思い通りのアクションが実行されます。

一般的に、このコードはかなり可能性が高いと言われています。EAが新しいスタート地点に来たことを認識できるように、変数をリセットするアルゴリズムのポイントを決めるだけでいいのです。ループや配列を通してコードを書くことも可能で、その方が複雑さを軽減できるかもしれませんが、ループ内の配列インデックスや ローソク足の番号の混乱を避けるために、変数を通してアルゴリズムを書いた方が良いでしょう。

 

みんな、最近、この問題に出会ったんだ。 誰が輪に入っているのか-コメントする。 自分でエラーを発見したんだ~よかった~早く...。コードを書いているとき、すべてエラーなくコンパイルされるが、trawlがうまくいかない....つまり、それ以上注文のループを進めないのです。以下は、そのコードの断片です...バグは以下の通りでした - 外部変数に注文の魔法を与えましたが、ループ内の注文の検索で - 小さな文字で、CTRL + Fによる検索 - 要求の "魔法" が続きました... コンパイラはエラーを出しませんでしたが、プログラムはループ内のトロールモードに変更されませんでした...ループが"magic"で中断してしまう...。 こんなんでいいのか?私 はずっと「魔法」と「マジック」は別の変数だと思っていたのですが...。というエラーが表示され、コンパイラはこの「マジック」変数が未定義であることを示すはずなのですが...。コードでは、現在、トロールを選択する前に実行され、Printa()はもう来ないように -魔法の ために- すなわち、この条件によるループからの終了は、異なる名前のために、満たされることはありません - "魔法"と "マジック"。

if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

// глоб переменные
...
...
extern int  Magic = 10;     // MagicNumber

//----------------------------------------------------------------------------
int start()                            // Спец. функция start
  {
  
   
   int orderCount = 0; 
  
   //---------------------------ТРАЛ ОРДЕРОВ---------------------------------------------------------------------------------------
   int orderType;
    for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
    {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
                ticket = OrderTicket( );                         // Номер ордера
       double   orderLots = OrderLots();                         // Lots   
       double   orderProfit = OrderProfit() + OrderSwap();       // Profit
       double   Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
       double   SL =  OrderStopLoss();                           // Значение StopLoss ордера
       double   TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                    }
                 
         
      orderCount++;                     // считаем ордера (не больше 10)
     
            
       while (!IsTradeAllowed() || !IsConnected()) Sleep(5000); RefreshRates();
       
      //----------------------------Тралим последовательно все наши ордера по виду трала------------------
      if (UseTrailing && orderCount > 0 && type ==0)   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
          {     
           if (orderType == OP_BUY)  SampleTrailing_texbook (0);          // если бай
           if (orderType == OP_SELL) SampleTrailing_texbook (1);          // если селл
          }      
      ...
      ...
      ...   
     Print( "Эксперт база: Всего наших ордеров = " ,orderCount);
     }   
//--------------------------------------------------------------------------------------------------------------------------------------     
   
   
  
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }

追伸:知らない人~意識しておかないと、コードでどこまでできるのか不明です...。

 
Roman.:

みんな、最近、この問題に出会ったんだ。 誰が輪に入っているのか-コメントする。 自分でエラーを発見したんだ~よかった~早く...。コードを書いているとき、すべてエラーなくコンパイルされるが、trawlがうまくいかない....つまり、それ以上注文ループを進めないのです。以下は、そのコードの断片です...バグは以下の通りでした。外部変数にマジックを命令したのですが、ループ内の命令検索で、小さな文字で、CTRL + Fによる検索で、「マジック」を要求すると、「マジック」に移行してしまいました。コンパイラはエラーを出しませんが、プログラムの実行がループ内のトロールモードに変わりませんでした。ループが"magic"で中断してしまう...。 こんなんでいいのか?私 はずっと「魔法」と「マジック」は別の変数だと思っていたのですが...。というエラーが表示され、コンパイラはこの「マジック」変数が未定義であることを示すはずなのですが...。コードでは、トロールを選択する前に実行されるようになり、Printa()はもはや出てこない -魔法の ために - すなわち、この条件でのループからの終了は、異なる名前 - "魔法"と "マジック"のため、実行されることはありません。

追伸:知らない人は要注意!そうでないと、どれだけコードに苦労するか...。


マジックが宣言されているのに、マジックが使われた場合、コンパイラは、マジック変数が宣言されていないと言います。

MetaEditor 4 401.

 
Roman.:

みんな、最近、この問題に出会ったんだ。 誰が輪に入っているのか-コメントする。 自分でエラーを発見したんだ~よかった~早く...。コードを書いているとき、すべてエラーなくコンパイルされるが、trawlがうまくいかない....つまり、それ以上注文のループを進めないのです。以下は、そのコードの断片です...バグは以下の通りでした - 外部変数に注文の魔法を与えましたが、ループ内の注文の検索で - 小さな文字で、CTRL + Fによる検索 - 要求の "魔法" が続きました... コンパイラはエラーを出しませんが、ループ内で、プログラムがトロールに変更されていません... 。ループが"magic"で中断してしまう...。 こんなんでいいのか?私 はずっと「魔法」と「マジック」は別の変数だと思っていたのですが...。というエラーが表示され、コンパイラはこの「マジック」変数が未定義であることを示すはずなのですが...。コードでは、トロールを選択する前に実行されるようになり、Printa()はもはや出てこない -魔法の ために - すなわち、この条件でのループからの終了は、異なる名前 - "魔法"と "マジック"のため、実行されることはありません。

追伸:知らない人~意識していないと、コードとの付き合い方が分からない...。

私の簡易トロールと比較してみてください。特に、オーダー・ルックアップのループである。

   // В глоб. переменных
   string sy=Symbol();
   // ...................................................................
   color  cl;
   double sl, StopLevel;
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)           continue;
         if (OrderMagicNumber()!=Magic)   continue;
         if (OrderType()>1)               continue;
         sl=OrderStopLoss();
         if (OrderType()==OP_BUY) {
            cl=clModifyBuy;
            StopLevel=NormalizeDouble(strG-DeltaStop*PointX, dg);
            if (sl<StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         if (OrderType()==OP_SELL) {
            cl=clModifySell;
            StopLevel=NormalizeDouble(strR+DeltaStop*PointX, dg);
            if (sl>StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         }
      }

原理はおわかりになると思います。

そして、魔法と魔法の変数は本当に違うんです。Ctrl+Fで検索する場合は、「大文字と小文字を一致させる」にチェックを入れてください。

コードのどこかで、両方を宣言しています。

 
artmedia70:

そして、魔法と魔法の変数は本当に違うんです。Ctrl+Fで検索する場合は、「大文字と小文字を区別する」にチェックを入れてください。

コードのどこかで、すべての後に両方を宣言している

その通りです。おかげさまで見つけました...。:-)))変数extern int Magic = 10;に加えて、Variablesの一番下に、変数-を宣言 しました。
int magic = 12345;

:-)))

私はMagic in order opening fieとMagic in the loopを考慮に入れていたことが判明し、彼らのトロールのためのオーダーループが機能しなかった...。:-)))

心からありがとうございます。Use Register "にチェックを 入れ、そこに置くと、すべて正常に動作するようになりました。

P.S.どのようにそれが起こるか!! (運がコードに行くとき - 準備ができて、宣言するためにいくつかのmajiksだけでなく...:-))))

 
artmedia70:

私の最もシンプルなトローリングと比較してみてください。特に、オーダーサーチのサイクル。

原理が明らかになると思います。

トロールのオプションをありがとうございました。原理は明快です。