Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1312

 
Alexey Belyakov :
Değiştirildi ve hata aldı: " 'array_atr' - geçersiz dizi erişimi "


belki bir şey yardımcı olur - yalnızca bir uzman değil, bir gösterge oluşturmanız gerekir

- peki, tip uzmanı da çalışıyor, sadece test cihazında görüntülenecek

 //+------------------------------------------------------------------+
//|                                                         тест.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"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot iATR
#property indicator_label1    "iATR"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrLightSeaGreen
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- входные параметры
input int                   atr_period= 14 ;           // период для вычисления
input string                symbol= " " ;             // символ
input ENUM_TIMEFRAMES       period= PERIOD_CURRENT ;   // таймфрейм
//--- индикаторный буфер
double  iATRBuffer[];
//--- переменная для хранения хэндла индикатора iAC
int     handle;
//--- переменная для хранения
string name=symbol;
//--- имя индикатора на графике
string short_name;
//--- будем хранить количество значений в индикаторе Average True Range
int     bars_calculated= 0 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- привязка массива к индикаторному буферу
   SetIndexBuffer ( 0 ,iATRBuffer, INDICATOR_DATA );
//--- определимся с символом, на котором строится индикатор
   name=symbol;
//--- удалим пробелы слева и справа
   StringTrimRight (name);
   StringTrimLeft (name);
//--- если после этого длина строки name нулевая
   if ( StringLen (name)== 0 )
     {
       //--- возьмем символ с графика, на котором запущен индикатор
      name= _Symbol ;
     }
//--- создадим хэндл индикатора
   handle= iATR (name,period,atr_period);
   if (handle== INVALID_HANDLE )
     {
       //--- сообщим о неудаче и выведем номер ошикби
       PrintFormat ( "Не удалось создать хэндл индикатора iATR для пары %s/%s, код ошибки %d" ,
                  name,
                   EnumToString (period),
                   GetLastError ());
       //--- работа индикатора завершается досрочно
       return ( INIT_FAILED );
     }
//--- покажем на какой паре символ/таймфрейм рассчитан индикатор Average True Range
   short_name= StringFormat ( "iATR(%s/%s, period=%d)" ,name, EnumToString (period),atr_period);
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
//--- нормальное выполнение инициализации индикатора
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---- проверка количества баров на достаточность для расчета
   if ( BarsCalculated (handle)<rates_total
      ||rates_total< 0 )
       return ( 0 );
//---- объявления локальных переменных
   int to_copy,limit;
//---- расчеты необходимого количества копируемых данных и
//стартового номера limit для цикла пересчета баров
   if (prev_calculated>rates_total || prev_calculated<= 0 ) // проверка на первый старт расчета индикатора
     {
      to_copy=rates_total; // расчетное количество всех баров
      limit=rates_total- 1 ; // стартовый номер для расчета всех баров
     }
   else
     {
      to_copy=rates_total-prev_calculated+ 1 ; // расчетное количество только новых баров
      limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров
     }
//---- копируем вновь появившиеся данные в массивы
   if ( CopyBuffer (handle, 0 , 0 ,to_copy,iATRBuffer)<= 0 )
       return ( 0 );
//---- индексация элементов в массивах как в таймсериях
   ArraySetAsSeries (iATRBuffer, true );
   ArraySetAsSeries (open, true );
   ArraySetAsSeries (high, true );
   ArraySetAsSeries (low, true );
   ArraySetAsSeries (close, true );
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov :
Değiştirildi ve hata aldı: " 'array_atr' - geçersiz dizi erişimi "


Bir dizi öğesine '[]' aracılığıyla erişilir.

Örneğin, boş öğeye erişim:

array_atr[ 0 ]
 
Vladimir Karputov :

Bir dizi öğesine '[]' aracılığıyla erişilir.

Örneğin, boş bir öğeye erişmek:


 double array_atr[];   

int ATR14;

int OnInit ()
  {
ATR14= iATR ( NULL , PERIOD_CURRENT , 14 );
   return ( 0 );   
  }
   
void OnDeinit ( const int reason)
  {
//---  
  }

void OnTick ()
{

CopyBuffer (ATR14, 0 , 0 , 2 ,array_atr);

Comment (

       "ATR14==: " , DoubleToString ((array_atr[ 1 ])* 100000 , 0 ), "\n" );

}
Vladimir Teşekkürler! Hazır!
 
Alexey Belyakov :


Vladimir Teşekkürler! Hazır!

Ne elde etmeye çalıştığını anlamak istedim ve sadece buraya geldim ve hiçbir şey anlamadım.

 //+------------------------------------------------------------------+
//|                                              Alexey Belyakov.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"
#include <Trade\Trade.mqh>
CTrade ExtTrade;
//---
int ATR14;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create ATR indicator and add it to collection
   ATR14= iATR ( _Symbol , _Period , 14 );
   if (ATR14== INVALID_HANDLE )
     {
       printf ( "Error creating ATR indicator" );
       return ( INIT_FAILED );
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   OnATR14();
  }
//+------------------------------------------------------------------+
//| refresh indicators                                               |
//+------------------------------------------------------------------+
void OnATR14()
  {
   MqlRates rt[ 2 ];
//--- go trading only for first ticks of new bar
   if ( CopyRates ( _Symbol , _Period , 0 , 2 ,rt)!= 2 )
     {
       Print ( "CopyRates of " , _Symbol , " failed, no history" );
       return ;
     }
   if (rt[ 1 ].tick_volume> 1 )
       return ;
//--- get current Moving Average
   double array_atr[ 1 ];
//--- get current ATR
   if ( CopyBuffer (ATR14, 0 , 0 , 1 ,array_atr)!= 1 )
     {
       Print ( "CopyBuffer from ATR failed, no data" );
       return ;
     }
   if (array_atr[ 0 ]>= 0.00100 && rt[ 0 ].close>array_atr[ 0 ])
     {
       Print ( "ATR14==: BUY" );
     }
   if (array_atr[ 0 ]<= 0.00100 && rt[ 0 ].close>array_atr[ 0 ])
     {
       Print ( "ATR14==: SELL" );
     }
  }
//+------------------------------------------------------------------+
 
Hey!
Kodlarla yeni ilgilenmeye başlıyorum ve programlama konusundaki cehaletim için hoşgörülü olmanızı rica ediyorum.
Bu parçanın mql5'teki çevirisiyle baş edemiyorum:

 int init() 
   {
   parus = MarketInfo( Symbol (), MODE_SPREAD ) * Point ;
   if (IsTesting() == true ) rf();
   if (IsTesting() == false ) rm();
   return ( 0 );
   }

MarketInfo'yu SymbolInfoInteger olarak değiştiriyorum ve alıyorum - şöyle:

 int init() 
   {
   parus = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT) * Point;
   if (IsTesting() == true ) rf();
   if (IsTesting() == false ) rm();
   return ( 0 );
   }

ve hatalar alıyorum.

tür dönüştürme nedeniyle olası veri kaybı

';' - açık parantez bekleniyor


Lütfen yardım edin ve gerçekte nasıl olması gerektiğini yazın.





 
Sprut 185 :
Hey!
Kodlarla yeni ilgilenmeye başlıyorum ve sizden programlama konusundaki cehaletime müsamaha göstermenizi rica ediyorum.
Bu parçanın mql5'e çevrilmesiyle baş edemiyorum:

MarketInfo'yu SymbolInfoInteger olarak değiştiriyorum ve alıyorum - şöyle:

ve hatalar alıyorum.

tür dönüştürme nedeniyle olası veri kaybı

';' - açık parantez bekleniyor


Lütfen yardım edin ve gerçekte nasıl olması gerektiğini yazın.

   parus = SymbolInfoInteger ( Symbol (), SYMBOL_SPREAD ) * Point () ;
   if ( MQLInfoInteger ( MQL_TESTER ) == true ) rf();
   if ( MQLInfoInteger ( MQL_TESTER ) == false ) rm();

Ve böylesi daha iyi

   parus = SymbolInfoInteger ( Symbol (), SYMBOL_SPREAD ) * Point ();
   if ( MQLInfoInteger ( MQL_TESTER )) rf();
     else rm();
 
Vitaly Muzichenko :

Ve böylesi daha iyi

Yardımın için çok teşekkürler !


Şimdi neden buna küfür ettiğini anlayamıyorum:

 int user_0 = SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL );

tür dönüştürme nedeniyle olası veri kaybı

Burada sorun ne?


 
Sprut 185 :
Yardımın için çok teşekkürler !


Şimdi neden buna küfür ettiğini anlayamıyorum:

tür dönüştürme nedeniyle olası veri kaybı

Burada sorun ne?


Uzun veya bul değil int

Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
SymbolInfoInteger - Получение рыночной информации - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Valeriy Yastremskiy :

Uzun veya bul değil int

anladım teşekkürler!!!

Şimdi net değil - neyin yanlış olduğu - burada:

trendstep = "Tredstep start on" +Trendstep_start+ " order" ;

hata: 'sayı'dan 'dize'ye örtük dönüştürme ("sayı"dan "dize"ye örtük dönüştürme)

faydalarının nesi var?


 
Sprut 185 :
anladım teşekkürler!!!

Şimdi net değil - neyin yanlış olduğu - burada:

hata: 'sayı'dan 'dize'ye örtük dönüştürme ("sayı"dan "dize"ye örtük dönüştürme)

faydalarının nesi var?


Açık bir dönüştürme DEĞİLDİR. Bu, sayılarla dizeler eklediğinizde, sayılar dize değişkenlerine dönüştürülür. Ama açık bir taneye ihtiyacın var. ve umarım trend adımının bir dize türü vardır. )))

trendstep = "Tredstep start on" + ( string ) Trendstep_start+ " order" ;