MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1530

 
Andrey Sokolov :

Apaçık. Teşekkür ederim. Belki başka biri tavsiye verebilir?

bu arada ben de seninle okudum

Orta Tampon

 //+------------------------------------------------------------------+
//|                                                  Demo_iBands.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        " https://www.mql5.com "
#property version    "1.00"

//--- входные параметры
input int                   bands_period= 20 ;           // период скользящей средней
input int                   bands_shift= 0 ;             // сдвиг
input double                deviation= 2.0 ;             // кол-во стандартных отклонений
input ENUM_APPLIED_PRICE    applied_price= PRICE_CLOSE ; // тип цены
//--- переменная для хранения хэндла индикатора iBands
int     handle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- создадим хэндл индикатора
   handle= iBands ( _Symbol , _Period ,bands_period,bands_shift,deviation,applied_price);
//--- если не удалось создать хэндл
   if (handle== INVALID_HANDLE )
     {
       //--- сообщим о неудаче и выведем номер ошибки
       PrintFormat ( "Не удалось создать хэндл индикатора iBands для пары %s/%s, код ошибки %d" ,
                   _Symbol ,
                   EnumToString ( _Period ),
                   GetLastError ());
       //--- работа индикатора завершается досрочно
       return ( INIT_FAILED );
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   if (handle!= INVALID_HANDLE )
       IndicatorRelease (handle);
//--- почистим график при удалении индикатора
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- индикаторные буферы
   double          UpperBuffer[];
   double          LowerBuffer[];
   double          MiddleBuffer[];
//--- количество копируемых значений из индикатора iBands
   int values_to_copy= 2 ;
//--- если FillArraysFromBuffer вернула false, значит данные не готовы - завершаем работу
   if (!FillArraysFromBuffers(MiddleBuffer,UpperBuffer,LowerBuffer,bands_shift,handle,values_to_copy))
       return ;
//--- сформируем сообщение
   Print ( "MiddleBuffer =" ,MiddleBuffer[ 0 ], "UpperBuffer =" ,UpperBuffer[ 0 ], "LowerBuffer =" ,LowerBuffer[ 0 ], "values_to_copy =" ,values_to_copy);
  }
//+------------------------------------------------------------------+
//| Заполняем индикаторные буферы из индикатора iBands               |
//+------------------------------------------------------------------+
bool FillArraysFromBuffers( double &base_values[],     // индикаторный буфер средней линии Bollinger Bands
                           double &upper_values[],     // индикаторный буфер верхней границы
                           double &lower_values[],     // индикаторный буфер нижней границы
                           int shift,                 // смещение
                           int ind_handle,             // хэндл индикатора iBands
                           int amount                 // количество копируемых значений
                          )
  {
//--- сбросим код ошибки
   ResetLastError ();
//--- заполняем часть массива MiddleBuffer значениями из индикаторного буфера под индексом 0
   if ( CopyBuffer (ind_handle, 0 ,-shift,amount,base_values)< 0 )
     {
       //--- если копирование не удалось, сообщим код ошибки
       PrintFormat ( "Не удалось скопировать данные из индикатора iBands, код ошибки %d" , GetLastError ());
       //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным
       return ( false );
     }
//--- заполняем часть массива UpperBuffer значениями из индикаторного буфера под индексом 1
   if ( CopyBuffer (ind_handle, 1 ,-shift,amount,upper_values)< 0 )
     {
       //--- если копирование не удалось, сообщим код ошибки
       PrintFormat ( "Не удалось скопировать данные из индикатора iBands, код ошибки %d" , GetLastError ());
       //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным
       return ( false );
     }
//--- заполняем часть массива LowerBuffer значениями из индикаторного буфера под индексом 2
   if ( CopyBuffer (ind_handle, 2 ,-shift,amount,lower_values)< 0 )
     {
       //--- если копирование не удалось, сообщим код ошибки
       PrintFormat ( "Не удалось скопировать данные из индикатора iBands, код ошибки %d" , GetLastError ());
       //--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитанным
       return ( false );
     }
//--- все получилось
   return ( true );
  }
//+------------------------------------------------------------------+
 
Meşgul olmayan ve bakabilen adamlar. dünkü hindi için bir danışman çizdi, ama bir şey böyle çalışmıyor. Görünüşe göre alım satımları sinyallerle değil. Ve karşı sinyalde anlaşmaları kapatmak için koşulları eklemeye çalıştım, ancak anlaşmalar ya kapandı ya da kapanmadı. hatayı bulmaya yardım edin. Belki durumda bir hata var?
 input int Magic = 000 ;
input double Lots = 0.1 ;
input int TakeProfit = 100 ;
input int StopLoss = 50 ;
input int Slippage = 5 ;

double vverh,vnuz,SL,TP;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   /* if (Digits == 3 || Digits == 5)
   {
      TakeProfit *=10;
      StopLoss *=10;
      Slippage *=10;
   }*/
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
           
     
      vverh = iCustom ( NULL , 0 , "777" , 0 , 1 ); // стрелка вверх
      vnuz = iCustom ( NULL , 0 , "777" , 1 , 1 ); // стрелка вниз
      
     //-----------------------------------------------------------
     if (CountSell() == 0 && vnuz > 0 )
      {
      tiket = OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , "" ,Magic, 0 , Red);
       if (tiket> 0 )
         {
         SL= NormalizeDouble (Bid+StopLoss* Point , Digits );
         TP= NormalizeDouble (Bid-TakeProfit* Point , Digits );
         if ( OrderSelect (tiket, SELECT_BY_TICKET))
             if (!OrderModify(tiket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на продажу" );
         } else Print ( "Ошибка открытия ордера на продажу" );
      }
      
       ////////////////////////////////////////////////////////////////
     if (CountBuy() == 0 && vverh > 0 )
      {
      tiket = OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue);
       if (tiket> 0 )
         {
         TP= NormalizeDouble (Ask+TakeProfit* Point , Digits );
         SL= NormalizeDouble (Ask-StopLoss* Point , Digits );
         if ( OrderSelect (tiket, SELECT_BY_TICKET))
           if (!OrderModify(tiket,OrderOpenPrice(),SL,TP, 0 ))
           Print ( "Ошибка модификации ордера на покупку" );
         } else Print ( "Ошибка открытия ордера на покупку" );
      }  
     
      
  }
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0 ;
   for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
   {
   if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
      {
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic && OrderType() == OP_SELL)
         count++;
      }
   }
   return (count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0 ;
   for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade--)
   {
   if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
      {
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
         count++;
      }
   }
   return (count);
}
Dosyalar:
 
PapaYozh :

Sadece durduğunda şaşırmayın.   Ya da arada bir işe yarayacaktır .

Ne sebeple? Neden neyin yanlış olduğunu yazmıyorsun?

 
Andrey Sokolov :

Ne sebeple? Neden neyin yanlış olduğunu yazmıyorsun?

Ne tür baskınlar?

 
PapaYozh :

Ne tür baskınlar?

Apaçık.

Başka biri bana orada neyin yanlış olduğunu söyleyebilir mi ve bir şeyler gerçekten yanlışsa hangi nedenle çalışmayı durduracak?

 
Andrey Sokolov :

Apaçık.

Başka biri bana orada neyin yanlış olduğunu söyleyebilir mi ve bir şeyler gerçekten yanlışsa hangi nedenle çalışmayı durduracak?

işte cevap

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma

İgor Makanu , 2021.07.05 14:16

çünkü gösterge henüz hesaplanmadı

https://www.mql5.com/ru/docs/series/barshesaplanmış


OnInit() bölümü, terminal ortamını elde etmek için en iyi yer değil, bence her şey mantıklı ve doğru çalışıyor

 
Alexey Viktorov :
işte cevap

Teşekkürler.

Başlangıçta hemen geçmiş üzerinde hesaplamalar yapmak gerekir. İhtiyaç böyle olduğu için internet üzerinden yapıyorum.

Hesaplamalardan önce internette bir duraklama eklendi. Eğer öyleyse, o zaman hepsi aynı, bazı "tuzaklar"?

 
Andrey Sokolov :

Başlangıçta hemen geçmiş üzerinde hesaplamalar yapmak gerekir. İhtiyaç böyle olduğu için internet üzerinden yapıyorum.

Hesaplamalardan önce internette bir duraklama eklendi. Eğer öyleyse, hepsi aynı, bazı "tuzaklar"?

OnTick()'te ilk çalıştırma bayrağını ayarlamak daha kolay ve daha güvenilirdir.

 
jarikn :
Meşgul olmayan ve bakabilen adamlar. dünkü hindi için bir danışman çizdi, ama bir şey böyle çalışmıyor. Görünüşe göre alım satımları sinyallerle değil. Ve karşı sinyalde anlaşmaları kapatmak için koşulları eklemeye çalıştım, ancak anlaşmalar ya kapandı ya da kapanmadı. hatayı bulmaya yardım edin. Belki durumda bir hata var?
Büyük olasılıkla gösterge çizer ... ve ayrıca günlükte hatalar arar
 
Andrey Sokolov :

Ne sebeple? Neden neyin yanlış olduğunu yazmıyorsun?

çünkü geliştiriciler OnInit() öğesinin başlatma için olduğunu ve başka bir şey için olmadığını yazdı

Ne olacağını tahmin etmeyeceğim, ilk gördüğüm şey, OnInit ()'deki gösterge değerlerini almak için duraklamış olmanız - kullanıcı şu anda TF'yi değiştirirse ne olacak?

Not: Expert Advisor'ı çalıştırırsanız, ardından terminali kapatıp , Expert Advisor zaten çalışıyorken terminali tekrar açarsanız kodunuz nasıl davranacak?