Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1312

 
Alexey Belyakov:
Изменил и получаем ошибку: " 'array_atr' - invalid array access "


может что то поможет - только нужно создать не эксперта а индикатор

- ну и эксперт типа также работает только отображаться будет в тестере

//+------------------------------------------------------------------+
//|                                                         тест.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:
Изменил и получаем ошибку: " 'array_atr' - invalid array access "


Обращение к элементу массива идет через '[]'.

Например обращение к нулевому элементу:

array_atr[0]
 
Vladimir Karputov:

Обращение к элементу массива идет через '[]'.

Например обращение к нулевому элементу:


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");

}
Владимир Спасибо! Готово!
 
Alexey Belyakov:


Владимир Спасибо! Готово!

хотел разобраться чего Вы пытаетесь получить и до-топал только до сюда и так и нечего не понял.

//+------------------------------------------------------------------+
//|                                              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");
     }
  }
//+------------------------------------------------------------------+


 

 
Привет!
Я только начинаю разбираться с кодами и прошу Вас быть снисходительными к моей безграмотности в программировании.
 
Я не могу справиться с переводом этого кусочка в mql5:

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

Меняю MarketInfo на SymbolInfoInteger  и у меня получается - так:

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

и получаю ошибки.

possible loss of data due to type conversion (возможная потеря данных из-за преобразования типов)

';' - open parenthesis expected (ожидаемая открытая скобка)


Помогите пожалуйста и напишите, как должно быть на самом деле.





 
Sprut 185:
Привет!
Я только начинаю разбираться с кодами и прошу Вас быть снисходительными к моей безграмотности в программировании.
 
Я не могу справиться с переводом этого кусочка в mql5:

Меняю MarketInfo на SymbolInfoInteger  и у меня получается - так:

и получаю ошибки.

possible loss of data due to type conversion (возможная потеря данных из-за преобразования типов)

';' - open parenthesis expected (ожидаемая открытая скобка)


Помогите пожалуйста и напишите, как должно быть на самом деле.

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

А лучше так

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

А лучше так

Спасибо большое за помощь !


Теперь не могу разобраться почему ругается на это:

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

possible loss of data due to type conversion (возможная потеря данных из-за преобразования типов)

Что здесь не так?


 
Sprut 185:
Спасибо большое за помощь !


Теперь не могу разобраться почему ругается на это:

possible loss of data due to type conversion (возможная потеря данных из-за преобразования типов)

Что здесь не так?


Лонг или бул Не инт

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

Лонг или бул Не инт

Спасибо разобрался !!!

Теперь не понятно - чего не так - здесь:

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

ошибка : implicit conversion from 'number' to 'string' (неявное преобразование из "числа" в "строку")

что то не так с плюсами?


 
Sprut 185:
Спасибо разобрался !!!

Теперь не понятно - чего не так - здесь:

ошибка : implicit conversion from 'number' to 'string' (неявное преобразование из "числа" в "строку")

что то не так с плюсами?


НЕ явное преобразование. Это когда строки с цифрами складываете, цифры преобразуются в строковые переменные. А нужно явное. и надеюсь трендстеп имеет тип стринг. ))) 

trendstep = "Tredstep start on" +(string)Trendstep_start+ " order";
Причина обращения: