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

 
erotin :

Bana partinin normalleşmesinde neyin yanlış olduğunu söyle?

Her şey yanlış. "Uzman Danışman hangi kontrollerden geçmeli..." yazısını okuyunuz. Orada hazır bir fonksiyon var.

 

Bitti, boş bir şablon oluşturdu, iCustom() işlevinin çalışması için gerekli her şeyi hazırladı.

İşlevde beni ilgilendiren iCrossAD göstergesini kaydettim.

İşlev çalışır, aşırı Yukarı ve Aşağı okların endekslerini doğru bulur, ancak bu okların ayarlandığı fiyat değerleri YANLIŞ.

Kodun kısa olduğu ortaya çıktı, bu yüzden hemen buraya göndereceğim, her ihtimale karşı bu danışmanın ve göstergenin dosyalarını ekleyeceğim.

 //+------------------------------------------------------------------+
//|                                             TestDoEasyPart08.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property description ""
#property strict
//--- includes
#include <DoEasy\Engine.mqh>
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
//---
input string                Inp_param_indi_iCrossAD = "Input parameters indicator iCrossAD" ; //----- "Внешние параметры индикатора iCrossAD" -----

input uint                  InpPeriodFind           = 400 ;                 // Bars for calculate
input uint                  InpUnheckedBars         = 2 ;                   // Unchecked bars
input uint                  InpPeriodIND            = 21 ;                   // CCI period

//--- global variables

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

uint             period_find = InpPeriodFind;       //Number bars for calculate

int             CrossAD;                           //Хэндл индикатора iCrossAD

double          Buf_Arrow_Sell[],                   //Массив буфера для приема значений последних стрелок ВНИЗ из индикатора iCrossAD
               Last_Arrow_Sell_volume,             //Переменная для записи значения цены последней стрелки ВНИЗ индикатора iCrossAD
               Last_Arrow_Sell_index;             //Переменная для записи значения индекса свечи последней стрелки ВНИЗ индикатора iCrossAD
               
double          Buf_Arrow_Buy[], Last_Arrow_Buy_volume, Last_Arrow_Buy_index;
   
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ArraySetAsSeries (Buf_Arrow_Buy, true );
   ArraySetAsSeries (Buf_Arrow_Sell, true );
//---
   CrossAD = iCustom (asymbol.Name(), _Period , "iCrossAD" );
   if (CrossAD == INVALID_HANDLE )
   {
       Print ( "Не удалось создать описатель индикатора iCrossAD!" );
       return ( INIT_FAILED );
   }
       else Print ( "Хендл iCrossAD = " ,CrossAD);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- delete objects
   ObjectsDeleteAll ( 0 , "" ,- 1 );
   Comment ( "" );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   int n= 0 ;
   
   if ( CopyBuffer (CrossAD, 1 , 0 , period_find, Buf_Arrow_Buy) != period_find)
      {  
         Print ( "НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d" , GetLastError ());
         return ;
      }
         for (n= 0 ; n<period_find; n++)
            {
               if (Buf_Arrow_Buy[n]!= EMPTY_VALUE ) break ;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
         Print ( "Last_Arrow_Buy_volume = " ,Last_Arrow_Buy_volume, ", Last_Arrow_Buy_index = " ,Last_Arrow_Buy_index);
         
   if ( CopyBuffer (CrossAD, 2 , 0 , period_find, Buf_Arrow_Sell) != period_find)
      {  
         Print ( "НЕ удалось правильно скопировать данные из 2-го буфера индикатора iCrossAD, error code %d" , GetLastError ());
         return ;
      }
         for (n= 0 ; n<period_find; n++)
            {
               if (Buf_Arrow_Sell[n]!= EMPTY_VALUE ) break ;
            }
         Last_Arrow_Sell_volume = Buf_Arrow_Sell[n];
         Last_Arrow_Sell_index  = n;
         Print ( "Last_Arrow_Sell_volume = " ,Last_Arrow_Sell_volume, ", Last_Arrow_Sell_index = " ,Last_Arrow_Sell_index);
      
Comment ( "-------------------------" , 
         "\n Last_Arrow_Buy_volume     = " ,Last_Arrow_Buy_volume,
         "\n Last_Arrow_Buy_index        = " ,Last_Arrow_Buy_index,
         "\n ---------------------- " ,
         "\n Last_Arrow_Sell_volume     = " ,Last_Arrow_Sell_volume,
         "\n Last_Arrow_Sell_index        = " ,Last_Arrow_Sell_index
         ); 
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if (! MQLInfoInteger ( MQL_TESTER ))
      engine. OnTimer ();
  }
Dosyalar:
iCrossAD.mq5  49 kb
 

"Uzmanlar" sekmesindeki günlük girişleri böyle görünür

2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0

2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = -11203799.85975282, Last_Arrow_Sell_index = 50.0

2019.05.20 15:11:16.798 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0

2019.05.20 15:11:16.798 Test_iCustom (EURUSD,H1) Last_Arrow_Sell_volume = -11203799.85975282, Last_Arrow_Sell_index = 50.0


 
Sergey Voytsekhovsky :

"Uzmanlar" sekmesindeki günlük girişleri böyle görünür

2019.05.20 15:11:15.025 Test_iCustom (EURUSD,H1) Last_Arrow_Buy_volume = -11211905.17483469, Last_Arrow_Buy_index = 5.0

Okların oluşturulduğu fiyatlar yerine = -11211905.17483469



 

Sergey Voytsekhovsky :

...

Okların oluşturulduğu fiyatlar yerine = -11211905.17483469

Ctrl+D tuşlarına basın, fareyi gösterge çizgileri boyunca hareket ettirin ve veri penceresinde tamponlarının hangi değerlere sahip olduğunu görün.

 
Artyom Trishkin :

Ctrl+D tuşlarına basın, fareyi gösterge çizgileri boyunca hareket ettirin ve veri penceresinde tamponlarının hangi değerlere sahip olduğunu görün.

Seni doğru anladıysam, odada olmayan bir kediyi mi arıyordum? Dizi fiyatlar ile değil de indikatör değerlerle mi doluydu o dönem? Teşekkürler, tekrar düşüneceğim.

Başka bir son soru - derleyici bana 2 uyarı veriyor


işaret uyuşmazlığı Test_iCustom.mq5 79 20

işaret uyuşmazlığı Test_iCustom.mq5 92 20


Nedenlerini anlayamıyorum, söyle pliz. "Tutarsızlık işareti" ne anlama geliyor (Yandex'ten çevirmen). ???


 
Sergey Voytsekhovsky :

Seni doğru anladıysam, odada olmayan bir kediyi mi arıyordum? Dizi fiyatlar ile değil de indikatör değerlerle mi doluydu o dönem? Teşekkürler, tekrar düşüneceğim.

Başka bir son soru - derleyici bana 2 uyarı veriyor


işaret uyuşmazlığı Test_iCustom.mq5 79 20

işaret uyuşmazlığı Test_iCustom.mq5 92 20


Nedenlerini anlayamıyorum, söyle pliz. "Tutarsızlık işareti" ne anlama geliyor (Yandex'ten çevirmen). ???


Numaranın işaretini kaçırıyor olabilirsiniz. Bu kod satırlarını göster.

 
Artyom Trishkin :

Numaranın işaretini kaçırıyor olabilirsiniz. Bu kod satırlarını göster.

 for (n= 0 ; n<period_find; n++)
İkincisi tamamen aynıdır (Strelok dizilerinde sıfır olmayan değerleri bulmak için döngüler).
 
Sergey Voytsekhovsky :
İkincisi tamamen aynıdır (Strelok dizilerinde sıfır olmayan değerleri aramak için döngüler).

n ve period_find değişkenlerinin türleri nelerdir? En önemli şey gösterilmedi ...

O zaman dene:

 for (n= 0 ; n<( int )period_find; n++)

Genel olarak - neden OnTick() işleyicisi düzeyinde bir döngü değişkeni bildiriyorsunuz?

Bu şekilde mümkün mü:

 for ( int n= 0 ; n<( int )period_find; n++)

Ve n bildirimini OnTick()'ten kaldırın - orada buna gerek yok.

 
Artyom Trishkin :

n ve period_find değişkenlerinin türleri nelerdir? En önemli şey gösterilmedi ...

 uint             period_find = InpPeriodFind;       //Number bars for calculate
int              n= 0 ;