Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1312

 
Alexey Belyakov:
Eu alterei-o e recebo erro: " 'array_atr' - acesso inválido ao array "


talvez algo ajude - só precisa de criar um indicador, não um especialista

- O consultor especializado trabalha da mesma forma, mas será exibido no provador

//+------------------------------------------------------------------+
//|                                                         тест.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:
Alterado e recebe erro: " 'array_atr' - acesso inválido ao array "


Um elemento de matriz é referenciado com '[]''.

Por exemplo, uma referência a um elemento nulo:

array_atr[0]
 
Vladimir Karputov:

Um elemento de matriz é referenciado com '[]''.

Por exemplo, uma referência a um elemento nulo:


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 Obrigado! Feito!
 
Alexey Belyakov:


Vladimir Obrigado! Feito!

Queria descobrir o que estava a tentar obter e só cheguei até aqui e não o consegui.

//+------------------------------------------------------------------+
//|                                              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");
     }
  }
//+------------------------------------------------------------------+
 
Hi!
Estou apenas a começar a compreender o código, por isso, por favor, seja tolerante com o meu analfabetismo na programação.
Não consigo lidar com a tradução desta peça em mql5:

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

Eu mudo MarketInfo para SymbolInfoInteger e recebo - por isso:

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

e eu recebo erros.

possível perda de dados devido à conversão do tipo

" ;" - parênteses abertosesperados


Por favor, ajude-me e diga-me como deve funcionar.





 
Sprut 185:
Hi!
Estou apenas a começar a compreender um código e peço-vos que sejam indulgentes com o meu analfabetismo na programação.
Não consigo lidar com a tradução desta peça em mql5:

Eu mudo MarketInfo para SymbolInfoInteger e recebo - por isso:

e eu recebo erros.

possível perda de dados devido à conversão do tipo

";" - parênteses abertosesperados


Por favor, ajude e escreva como deve ser, de facto.

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

Ou melhor assim

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

Ou melhor ainda

Muito obrigado pela sua ajuda!


Agora não consigo perceber porque é que diz isto:

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

possível perda de dados devido à conversão do tipo

O que há de errado?


 
Sprut 185:
Muito obrigado pela vossa ajuda!


Agora não consigo perceber porque é que diz isto:

possível perda de dados devido à conversão do tipo

O que está errado aqui?


Longo ou grosso Não int.

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

Longo ou Touro Não Int.

Obrigado por teres descoberto!!!

Agora não está claro - o que está errado - aqui:

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

erro : conversão implícita de 'número' para 'string'

há algo de errado com as vantagens?


 
Sprut 185:
Obrigado classificado!!!

Agora não está claro - o que está errado - aqui:

erro : conversão implícita de 'número' para 'string'

há algo de errado com as vantagens?


NÃO é uma conversão implícita. É quando se adicionam cordas a números, os números são convertidos em variáveis de cordas. E precisa de uma explícita. e esperemos que a tendência tenha um tipo de corda. )))

trendstep = "Tredstep start on" +(string) Trendstep_start+ " order";
Razão: