Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 323

 

Es decir, según tengo entendido, al recibir datos después de esta impresión y el mensaje en el cuaderno de bitácora

Wait Data for GBPUSD 

¿la prueba procede según el algoritmo?

 
R0MAN:

Es decir, según tengo entendido, al recibir datos después de esta impresión y el mensaje en el cuaderno de bitácora

¿la prueba se ejecuta según el algoritmo?

¿En qué función está la línea? Si está en OnInit() - entonces después de esta línea, todo lo que esté por debajo no funcionará... OnCalculate() empieza a funcionar. Estamos probando con el indicador GBPUSD no totalmente inicializado.
 
Hola a todos, he puesto la directiva#property strict y me han salido 4 errores.
errores en 2,3,5,8 líneas

if (CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) return (0);
op = NormalizarDoble(Oferta,Dígitos);
tp = NormalizeDouble(Oferta - (TakeProfit)*Punto,Dígitos);
si (TakeProfit==0) tp=0;
sl = NormalizeDouble(Oferta + (StopLoss)*Punto,Dígitos);
si (StopLoss==0) sl=0;
CalcLot();
Ticket=OrderExists(OP_SELL);
if (Ticket<MaxTrades && OrderSymbol()==Symbol())
si (Ticket==-1)
 
MigVRN:
¿Pero en qué línea debe estar? Si está en OnInit() - todo lo que esté por debajo no funcionará... OnCalculate() empieza a funcionar. Estamos probando con el indicador GBPUSD no totalmente inicializado.

Entendido. Gracias. Esto no ha ocurrido antes...

OnCalculate() empieza 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++) // проходим по треубемому промежутку и расчитываем медиану
        {
 

Buenas tardes queridos usuarios del foro.

Por favor, pueden decirme la razón por la que el ciclo no se repite.

Esta es mi primera creación de prueba, así que no juzguen severamente).

Gracias de antemano.

//+-------------------Переменные 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:

Buenas tardes queridos usuarios del foro.

Por favor, pueden decirme la razón por la que el ciclo no se repite.

Esta es mi primera creación de prueba, así que no juzguen severamente).

Gracias de antemano.

Buenas noches. Poner la variable kolpos en el cuerpo de start().
 
Tapochun:
Buenas noches. Poner la variable kolpos en el cuerpo de start().
Gracias por su pronta respuesta. Muy útil.
 

Hola a todos.

Esta es la situación.

El Asesor Experto trabaja en el TF M15.

Al mismo tiempo, no puedo copiar los datos de precios para los TFs más antiguos ( por ejemplo CopyHigh(Symbol,PERIOD_D1,0,period,Hi_array) )

no puede copiar más de un año. En general, no es sorprendente, porque los resultados de la sincronización muestran alrededor de 25 mil barras de 15M, que es exactamente un año.

¿Cómo puedo obtener datos para un periodo más largo? ¿Debo sincronizarlo con el D1 o tengo otra forma?

 
metatrader4 745build, como insertar un script para una versión anterior, los scripts no funcionan
 
valera5111:
Metatrader4 745build, cómo insertar un script para una versión anterior, los scripts no funcionan

Por favor, aclare qué quiere hacer exactamente.

Describe qué errores se producen (al compilar, mira la pestaña "Errores", al lanzar en el terminal, mira la pestaña "Expertos").