Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1019

 
Artyom Trishkin:
Impressão() em modo visual

Ótimo! Obrigado! Tudo deu certo. Verifiquei todas as variáveis de uma só vez.

 
Roni Iron:

Boa tarde!

Quais são as opções para obter dados deste tipo:

Tempo (UTC),Ask,Bid,AskVolume,BidVolume

Perguntar, licitar - é suficiente especificar. Você não precisa ficar muito complicado, e há apenas 1 volume em Forex.

iVolume

Retorna o valor do volume do tick da barra (especificado pelo parâmetro de deslocamento) do gráfico correspondente.

long  iVolume( 
   string           symbol,          // символ 
   int              timeframe,       // период 
   int              shift            // сдвиг 
   );
 
Olá, você poderia me informar, quando eu instalo um indicador personalizado no MQL4, tudo funciona, mas quando eu mudo para outro período de tempo somente o deinit (do período anterior) funciona, e o init não funciona em um novo, ou seja, o programa não reinicia, ele apenas remove da janela. Quando ajusto manualmente o indicador para o novo período de tempo, tudo vai bem. Qual pode ser o problema?
 

Este é exatamente o truque - o forex tem um volume de carrapato de uma barra, mas não há volume de comércio de carrapatos. Mas as fontes de cotações de carrapatos (Ducascopy, etc.) dãoAskVolume,BidVolume valoresapós valores de preço na forma 0,32,0,12 (e não está claro se são 2 dígitos com vírgulas ou 4.

Obrigado!

 
Existe algum truque para criar um arquivo CSV sem separadores?
 

Olá.

Por favor, avise que reescrevi meu código para MQL5, que foi escrito para MQL4.

Eu tenho dois EMAs, um por um.

Não tenho erros ao compilá-lo, mas não mostra os mesmos resultados que na MQL4.

Eu dei uma olhada no manualda MQL5, mas não entendi nada.

//+------------------------------------------------------------------+
//|                                                           MA.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot 1
#property indicator_label1  "MA 1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrLime
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot 2
#property indicator_label2  "MA 2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//
input int PER=8; //Period
//
double         MA_1[];
double         MA_2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,MA_1,INDICATOR_DATA);
      SetIndexBuffer(1,MA_2,INDICATOR_DATA);
         IndicatorSetInteger(INDICATOR_DIGITS,2);
//---
   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[])
  {
   program(rates_total,prev_calculated,close);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+---EMA

double EMA(double N,double P,double EMA0=0)//формула
  {
   double  A=2/(N+1);                      //расчета
   return(A*P+(1-A)*EMA0);                 //ЕМА
  }
//+---
void program(int rates_total,int prev_calculated,const double &close[])
  {

   int Y=rates_total-prev_calculated;
   if(prev_calculated==0) Y=Y-PER-1;

   for(Y=Y; Y>=0; Y=Y-1)

     {
     
      MA_1[Y]=EMA(PER,close[Y],MA_1[Y+1]);//первая
      MA_2[Y]=EMA(PER,MA_1[Y],MA_2[Y+1]);//на неё вторая

     }
   return;
  }
//+------------------------------------------------------------------+
 
imknk:

Olá.

Por favor, avise que reescrevi meu código para MQL5, que foi escrito para MQL4.

Eu tenho dois EMAs, um por um.

Não tenho erros ao compilá-lo, mas não mostra os mesmos resultados que na MQL4.

Já parti meus olhos no manual daMQL5, não entendo nada.

Em mql5, os amortecedores têm que ser invertidos, à medida que recuam.

Acrescentar uma construção e ler sobre ela

ArraySetAsSeries(MA_1,true);
Документация по MQL5: Пользовательские индикаторы / SetIndexBuffer
Документация по MQL5: Пользовательские индикаторы / SetIndexBuffer
  • www.mql5.com
[in]  Тип данных, хранящихся в индикаторном массиве. По умолчанию INDICATOR_DATA (значения рассчитанного индикатора). Может также принимать значение INDICATOR_COLOR_INDEX, тогда данный буфер предназначен для хранения индексов цветов для предыдущего индикаторного буфера. Можно задать до 64 цветов в строке #property indicator_colorN. Значение...
 
Vitaly Muzichenko:

Em mql5 você tem que virar os amortecedores, eles vão para trás.

Acrescentar uma construção e ler sobre ela

Obrigado, vou tentar agora.
 

Por favor, ajude, onde está o erro?

Porque quando uma condição é passada para uma função ela jura " 'all_clouse' - função não definida".

if(buy>=position)
 {
   All_clouse();  // 'All_clouse' - wrong parameters count

 }
..............
дальше код
..............
Уже за пределами OnTick
void All_clouse(int a,double x, double y)
  {
.............
   } к самой функции закрытия ордеров у него претензий нет.
 
Gilmor:

Por favor, ajude, onde está o erro?

Por que em uma condição de "se" com um salto para uma função diz " 'all_clouse' - função não definida"?

Porque você precisa alimentar a função com parâmetros e você está chamando-a de All_clouse() vazia

void All_clouse(int a,double x, double y)
Razão: