Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 661

 
berezhnuy :

Güzel gün! Lütfen bana bu sorunu nasıl çözeceğimi söyleyin:

baykuşta kullanıyorum:

Baykuş her kene üzerinde çalışır, aksi takdirde ana koşullar karşılanmayacaktır. iMAOnArray için sadece 20 çubuk kullanıyorum, ancak test cihazında baykuş çok uzun süre düşünüyor. Başlangıç bloğunda ayarlayıp çağırırım.

Bu pribluda'nın kullanımı nasıl optimize edilir, böylece ana durum her bir işarette kontrol edilir ve test cihazı yavaşlamaz. Sonra 4 saatlik bir grafikte bir yıl boyunca 2 saat süren bir baykuş testim var. Ne kadar optimizasyon yapılması gerektiğini hayal etmekten korkuyorum)))


Kod olmadan kimse sana yardım edemez
 

İşte temelde tüm kod:

 //------- Внешние параметры советника -----------------------------------------+
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 başıboşluğu kaldırırsanız, test bir dakikadan daha kısa sürede geçer. Bu koşulu koda eklerseniz, test 2 saat sürer.

 
berezhnuy :

Temelde tüm kod burada:

Center_errey başıboşluğu kaldırırsanız, test bir dakikadan daha kısa sürede geçer. Bu koşulu koda eklerseniz, test 2 saat sürer.


İndikatör yapmayı denediniz mi?
 

0,1,2 değerlerini alabilen bir A değişkenimiz var.

Bu karşılaştırmalar eşdeğer olacak mı?

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

 
evillive :

0,1,2 değerlerini alabilen bir A değişkenimiz var.

Bu karşılaştırmalar eşdeğer olacak mı?

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

Değişken, numaralandırma (enum) türündeyse, ifadeler aynıdır.
 
evillive :

0,1,2 değerlerini alabilen bir A değişkenimiz var.

Bu karşılaştırmalar eşdeğer olacak mı?

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

Hayır, çünkü ne "A=0" ne de "A=1" bir karşılaştırma değildir.

Ancak karşılaştırma "A == 0" ve "A == 1" şeklindedir.

 
simpleton :

Hayır, çünkü ne "A=0" ne de "A=1" bir karşılaştırma değildir.

Ancak karşılaştırma "A == 0" ve "A == 1" şeklindedir.

+1! :)
 
berezhnuy :

İşte temelde tüm kod:

Center_errey başıboşluğu kaldırırsanız, test bir dakikadan daha kısa sürede geçer. Bu koşulu koda eklerseniz, test 2 saat sürer.

Şartlara göre, yeniden hesaplamalar ve kontroller her onay , ancak yalnızca yeni bir çubuk göründüğünde geçerlidir.

Bu nedenle, aşağıdaki gibi uygun işlevin uygulanması tavsiye edilir:

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

ve Center_errey'i yalnızca biri görünürse çalıştırın.

Ayrıca herhangi bir "çöp" de atabilirsiniz. Ama prensipte hızı etkilemez.

Ayrıca kodunuzda büyük bir hata var - bir marjın olmaması durumunda tüm kodu iptal ediyorsunuz. Ama trol ne olacak? ... Her ne kadar ... belki de bu, yorumlardan anladığım kadarıyla bunun sadece kodun bir parçası olduğu gerçeğinden kaynaklanıyor.

 
simpleton :

Hayır, çünkü ne "A=0" ne de "A=1" bir karşılaştırma değildir.

Ancak karşılaştırma "A == 0" ve "A == 1" şeklindedir.


Zachot)))


Sadece MQL'de yazmadım, ama resmi olarak bu bir aksaklık (:

 
evillive :

Zachot)))


Sadece MQL'de yazmadım, ama resmi olarak bu bir aksaklık (:

Resmi olarak ise, hayır, çünkü hala NULL olabilir
Neden: