どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 661

 
berezhnuy:

こんにちは、この問題を解決する方法を教えていただけませんか?

フクロウで使っています。

フクロウは、すべてのティックで実行され、そうでない場合は基本的な条件が満たされません。iMAOnArrayでは20本しか使っていませんが、テスターではowlが考えるのに非常に時間がかかります。スタートブロックにセットして呼んでいます。

このツールの使用方法を最適化することで、主要な条件を毎ティック確認し、テスターの速度を低下させないようにする方法です。4時間足のチャートでフクロウを1年間テストしても、2時間しかかかりませんから。どれだけの最適化が必要なのか、想像するのが怖いです)))


コードなしには、誰もあなたを助けることはできません
削除済み  

基本的にはこのコードが全てです。

//------- Внешние параметры советника -----------------------------------------+
extern string _P_Expert = "---------- Параметры советника";
extern int      Magic      = 777;                 // Магический номер позиций
extern double   SL=10;                            // Размер лося
extern double   TP=10000;                           // Размер профита 
extern string     ____= "Параметры блока MoneyManagement";
extern bool      MoneyManagement=false;
extern double    Lots          = 0.01;  
extern int       MarginPercent=3;
//------- Параметры трала -----------------------------------------------------+
extern string     ______= "Параметры блока TrallingStop";
extern bool      TralSimple=true;
//------- Характкристики баров ------------------------------------------------+

//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh>
#include <stderror.mqh>

int start()
{

   total=OrdersTotal();
   Comment( LotsCounting() );
//+=================================================================================+
  // Проверка средств
   if(AccountFreeMargin()<(1000*Lots)){
      Print("We have no money. Free Margin = ", AccountFreeMargin());   
      return(0);  
   }
//===========================  Открытие позиций  ===================================+ 
//==========================================================================================+
//=============================   Center_array      ========================================+
      double Center_array[50];
      int    h,limit=ArraySize(Center_array);
      ArraySetAsSeries(Center_array,true);
      for(h=0; h<limit; h++)
         Center_array[h]=iRSI(NULL,0,14,0,h);
      double MA_1 =iMAOnArray(Center_array,0,14,0,MODE_SMA,1);
      double rs_1 = iRSI(NULL,0,14,0,1);
      
      if (Last_Max1!=Max1){
      if (Close[1]>Close[2] && rs_1<MA_1){
               lots=LotsCounting();
               OrderSend(Symbol(),OP_BUYSTOP,lots,(Max1),0,SL_buy,TP_buy, "Покупаем ",Magic,Expiration,Blue);
               Last_Max1=Max1;
               PlaySound("ok.wav");
               {
               Print ("При открытии произошла ошибка ", GetLastError());
               return;
               }
            }
         }
       }

//==========================================================================================+
      if (delet) DeleteOppositeOrders("",-1,Magic);
//==========================================================================================+
//=======================================TrallingStop=======================================+
      for ( int v = OrdersTotal() - 1; v >= 0; v -- ){       
         if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){           
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ 
               //+=================================================================================+
               ///+================================Обычный трал ====================================+
               if (TralSimple){
                  //+=================================================================================+
                  if(OrderType() == OP_BUY){
                     if((Bid-OrderOpenPrice()) > (Point*TrailingStop)){
                        if(OrderStopLoss() < Bid-Point*TrailingStop || (OrderStopLoss()==0)){
                           OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);  
                        }
                     }
                  }
               }                                   
            }  // Symbol()  
         } // select
      } //total 
        //============================== Конец блока закрытия ==============================+
 return(0);
}
//==========================================================================================+

Center_erreyが削除された場合、テストは1分もかかりません。この条件がコードに含まれたままだと、テストは2時間実行されます

 
berezhnuy:

基本的にはこのコードが全てです。

Center_erreyが削除された場合、テストは1分もかかりません。この条件がコードに含まれたままだと、テストは2時間実行されます


インジケーターを作ろうとしなかったのですか?
 

は変数Aを持ち、これは0,1,2という値をとることができる。

これらの比較は等価になるのでしょうか?

if(A=0 || A=1){do} and if(A != 2){do}.

 
evillive:

は変数Aを持ち、これは0,1,2という値をとることができる。

これらの比較は等価になるのでしょうか?

if(A=0 || A=1){do} and if(A != 2){do}.

変数が enum 型の場合、式は同一である。
削除済み  
evillive:

は、値0,1,2を取ることができる変数Aを持っています。

これらの比較は平等になるのでしょうか?

if(A=0 || A=1){do} and if(A != 2){do}.

いいえ、「A=0」も「A=1」も比較対象にはならないからです。

しかし、比較対象は「A==0」と「A==1」です。

 
simpleton:

いいえ、「A=0」も「A=1」も比較対象にはならないからです。

しかし、"A == 0 "と "A == 1 "は比較である。

+1!:)
 
berezhnuy:

基本的にはこのコードが全てです。

Center_erreyが削除された場合、テストは1分もかかりません。この条件をコードに含めると、テストは2時間程度で終了します。

ちなみに、再計算やチェックは毎回のティックには 関係なく、新しいバーが表示されたときだけです。

そのため、このように対応する関数を適用することに意味があるのです。

bool NevBar(){
   static int PrevTime=0;
   if (PrevTime==Time[0]) return(false);
   PrevTime=Time[0];
   return(true);}

と表示されたときだけ、Center_erreyを実行します。

また、さまざまな「ゴミ」を捨てることもあるでしょう。しかし、本質的には速度に影響を与えることはないでしょう。

また、コードに重大な誤りが あります。マージンがない場合、コード全体をキャンセルしてしまいます。トロールはどうですか?とはいえ...は、コメントで理解したように、コードの一部でしかないからでしょう。

 
simpleton:

いいえ、「A=0」も「A=1」も比較対象にはならないからです。

しかし、"A == 0 "と "A == 1 "は比較である。


クレジット )))


ただ、MQLで書いたわけではないのですが、形式上、それが面倒で(。

 
evillive:

スコア )))


ただ、私はMQLで書いていないのですが、形式的にはそれが問題なのです(。

技術的なことではなく、NULLがあるかもしれないからです。