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

 

Isto é, tanto quanto sei, ao receber dados após esta impressão e a mensagem no livro de bordo

Wait Data for GBPUSD 

o teste prossegue de acordo com o algoritmo?

 
R0MAN:

Isto é, tanto quanto sei, ao receber dados após esta impressão e a mensagem no livro de bordo

o teste funciona de acordo com o algoritmo?

Em que função está a linha? Se estiver no OnInit() - então depois desta linha, tudo abaixo dela não vai funcionar... OnCalculate() começa a funcionar. Estamos a testar com um indicador GBPUSD não totalmente inicializado.
 
Olá a todos, coloquei a directiva#propriedade rigorosa e 4 erros apareceram.
erros em 2,3,5,8 linhas

if (CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) return (0);
op = NormalizeDouble(Bid,Digits);
tp = NormalizeDouble(Bid - (TakeProfit)*Ponto,Dígitos);
se (TakeProfit==0) tp=0;
sl = NormalizeDouble(Bid + (StopLoss)*Ponto,Dígitos);
se (StopLoss==0) sl=0;
CalcLot();
Ticket=OrderExists(OP_SELL);
se (Ticket<MaxTrades && OrderSymbol()==Symbol())
se (Ticket==-1)
 
MigVRN:
Mas em que linha deveria estar? Se estiver no OnInit() - tudo abaixo não vai funcionar... OnCalculate() começa a funcionar. Estamos a testar com um indicador GBPUSD não totalmente inicializado.

Compreendido. Obrigado. Isto nunca tinha acontecido antes...

OnCalculate() está a começar a funcionar.

//------------------------------------------------------------------    OnInit
int OnInit()
{
        SetIndexBuffer(0, Mediana, INDICATOR_DATA);
        ArraySetAsSeries(Mediana, true);
        // задали имена валют
      ...
//------------------------------------------------------------------    OnCalculate
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[])
{

        for (int i=0; i<6; i++) if (Pair[i].CopyBuf(nBars)<0) { Print("Wait Data for "+Pair[i].m_name); return(0); } // получили данные из МА в буфера // при ошибке выходим
        
        int limit=rates_total-prev_calculated; if (limit>=rates_total) limit=rates_total-1; // ограничили на таймсерию
        if (limit>nBars) limit=nBars; // ограничили на число скопированных данных
        
        for(int i=0; i<limit; i++) // проходим по треубемому промежутку и расчитываем медиану
        {
 

Boa tarde, caros utilizadores do fórum.

Por favor, diga-me a razão pela qual o ciclo não se repete.

Esta é a minha primeira criação de teste, por isso não julgue severamente).

Obrigado de antemão.

//+-------------------Переменные MACD--------------------------------+
extern int fast_ema_period=12; // период быстрой средней
extern int slow_ema_period=26; // период медленной средней
extern int signal_period=9; // период усреднения разности
extern int shift_MACD=0; // сдвиг индикатора MACD
//+-------------------Переменные DeM---------------------------------+
extern int DeM_period=14; // период усреднения
extern double levelUP=0.7; // верхний уровень
extern double levelDONE=0.3; // нижний уровень
extern int shift_DeM=0; // сдвиг индикатора DeM
//+-------------------Общие переменные-------------------------------+
extern int Magic=7770000; // магический номер
extern double Lot=0.01; // размер лота
extern int slippage=4; // проскальзывание цены
extern int SL=150; // СтопЛосс
extern int TP=300; // ТейкПрофит
int kolpos=0; // количество позиций советника
//+------------------------------------------------------------------+
//| Старт советника                                                  |
//+------------------------------------------------------------------+
int start()                                  
{
   double MAIN=iMACD(Symbol(),0,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_MAIN,shift_MACD);
   double SIGNAL=iMACD(Symbol(),0,fast_ema_period,slow_ema_period,signal_period,PRICE_CLOSE,MODE_SIGNAL,shift_MACD);
   double DeMval=iDeMarker(Symbol(),0,DeM_period,shift_DeM);
//---
   for (int pos=0; pos<OrdersTotal(); pos++)
      {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      kolpos++;
      }
   if(kolpos==0)
      {
      if(MAIN>0&&SIGNAL>0&&SIGNAL>MAIN&&DeMval>levelUP)
      OrderSend(Symbol(),OP_SELL,Lot,Bid,slippage,Bid+SL*Point,Bid-TP*Point,NULL,Magic,0,clrBlue);
      if(MAIN<0&&SIGNAL<0&&SIGNAL<MAIN&&DeMval<levelDONE)
      OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,clrRed);
      }
//---
   return(0);
} 
 
N0mad:

Boa tarde, caros utilizadores do fórum.

Por favor, diga-me a razão pela qual o ciclo não se repete.

Esta é a minha primeira criação de teste, por isso não julgue severamente).

Obrigado de antemão.

Boa noite. Colocar a variável kolpos no corpo de partida().
 
Tapochun:
Boa noite. Colocar a variável kolpos no corpo de partida().
Obrigado pela sua resposta imediata. Muito útil.
 

Olá a todos!

Aqui está a situação.

O Consultor Especialista trabalha na TF M15.

Ao mesmo tempo, não posso copiar dados de preços para TFs mais antigos ( por exemplo, CopyHigh(Símbolo,PERÍODO_D1,0,período,Hi_array) )

não pode copiar mais do que um ano. Em geral não é surpreendente, porque os resultados da sincronização mostram cerca de 25 mil barras de 15M, o que é exactamente um ano.

Como é que posso obter dados por um período mais longo? Devo sincronizá-lo com D1 ou tenho outra forma?

 
metatrader4 745build, como inserir um guião para uma versão anterior, os guiões não funcionam
 
valera5111:
Metatrader4 745build, como inserir um guião para uma versão anterior, os guiões não funcionam

Por favor especifique o que pretende fazer exactamente?

Descrever que erros ocorrem (ao compilar, olhar para o separador "Erros", ao lançar no terminal, olhar para o separador "Especialistas").

Razão: