Fecha en que se compiló el archivo sin tiempo (las horas, los minutos y los segundos son 0)
__DATETIME__
Fecha y hora en que se compiló el archivo
__LINE__
Número de línea en el código fuente donde se encuentra la macro
__FILE__
Nombre del archivo que se está compilando
__PATH__
Ruta absoluta al archivo compilado actual
__FUNCIÓN__
Nombre de la función en cuyo cuerpo se encuentra la macro
__FUNCSIG__
Firma de la función en cuyo cuerpo se encuentra la macro. La descripción de la función con los tipos de parámetros puede ser útil para identificar lasfunciones sobrecargadas
¿Podría decirme en qué parte del código hay un error que impide abrir una posición de COMPRA en la misma barra con VENTA que ha cerrado la posición anterior?
Las reglas son sencillas (de aprender): 1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - cruce por indicador rápido 0
//+------------------------------------------------------------------+//| TestDPO.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#include <Trade\Trade.mqh>
CTrade trade;
inputint dpo_fast_period = 9; // DPO Fast Periodinputint dpo_slow_period = 40; // DPO Fast Periodinputint magic = 1000; // Magic советникаinputulong slippage = 10; // Проскальзывание ценыinputdouble volume = 0.1; // размер позицииint DPO_fast; // Хэндл для быстрого DPOint DPO_slow; // Хэндл для медленного DPOdouble fDPOVal[]; //Динамический массив для хранения значений fast DPOdouble sDPOVal[]; //Динамический массив для хранения значений slow DPO//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---------------Задаем цены покупки и продажи------------------------double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
int signal=0; // сигнал на покупку, продажу//--------------Проверка на новый барif(!isNewBar())
return;
//--------------------------------------------------------------------
DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period); // получаем хэндлы для быстрого
DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленногоArraySetAsSeries(fDPOVal,true); //задаем направление индексов массиваArraySetAsSeries(sDPOVal,true);
if(CopyBuffer(DPO_fast,0,0,10,fDPOVal)<0) // наполняем массив значений DPO fast
{
Alert("Ошибка копирования буфера индикатора fast DPO. Ошибка ", GetLastError());
}
if(CopyBuffer(DPO_slow,0,0,10,sDPOVal)<0) // наполняем массив значений DPO slow
{
Alert("Ошибка копирования буфера индикатора slow DPO. Ошибка ", GetLastError());
}
double DPO_fast_c_value=NormalizeDouble(fDPOVal[1],6); // запоминаем значение индикатора DPO fast на предыдущем бареdouble DPO_slow_c_value=NormalizeDouble(sDPOVal[1],6); // запоминаем значение индикатора DPO slow на предыдущем бареdouble DPO_fast_p_value=NormalizeDouble(fDPOVal[2],6); // запоминаем значение индикатора DPO fast на пред-предыдущем бареdouble DPO_slow_p_value=NormalizeDouble(sDPOVal[2],6); // запоминаем значение индикатора DPO slow на пред-предыдущем бареif(DPO_slow_c_value>0 && DPO_slow_p_value<0 && DPO_fast_c_value>0) // если медленный индикатор пересекает 0 снизу вверх и быстрый находится выше 0
signal=1; // сигнал на открытие покупкиif(DPO_slow_c_value<0 && DPO_slow_p_value>0 && DPO_fast_c_value<0) // если медленный индикатор пересекает 0 сверху вниз и быстрый находится ниже 0
signal=-1; // сигнал на открытие продажиif(DPO_fast_c_value>0 && DPO_fast_p_value<0) // если быстрый индикатор пересекает 0 снизу вверх
signal=-2; // сигнал на закрытие продажиif(DPO_fast_c_value<0 && DPO_fast_p_value>0) // если быстрый индикатор пересекает 0 сверху вниз
signal=2; // сигнал на закрытие покупкиswitch (signal)
{
case -1:
trade.Sell(volume,NULL,Bid,0,0,NULL);
break;
case1:
trade.Buy(volume,NULL,Ask,0,0,NULL);
break;
case -2:
trade.PositionClose(_Symbol,slippage);
break;
case2:
trade.PositionClose(_Symbol,slippage);
break;
}
}
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Как я собираю себе советника методом тыка Из этих...
¿Podría decirme en qué parte del código hay un error que impide abrir una posición de COMPRA en la misma barra con VENTA que cerró una posición anterior?
Las reglas son sencillas (de aprender): 1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - indicador rápido que cruza la línea 0
Todo funciona correctamente: las condiciones de apertura cruzan la línea 0 del indicador lento, sólo el indicador rápido cruza la línea 0 en el lugar especificado.
Hay que añadir una condición para abrir una posición en el lugar especificado, lento en la misma zona y rápido cruza la línea 0
¿Podría indicar en qué parte del código hay un error que impide que se abra la posición de COMPRA en la misma barra con la de VENTA, que ha cerrado una posición anterior?
Las reglas son sencillas (de aprender): 1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - cruce por indicador rápido 0
Estás cometiendo un grave error: ¡Estás creando DOS INLIKERS POR CADA TICK!
//--------------------------------------------------------------------
DPO_fast=iCustom(NULL,0,"Examples\\DPO",dpo_fast_period); // получаем хэндлы для быстрого
DPO_slow=iCustom(NULL,0,"Examples\\DPO",dpo_slow_period); // получаем хэндлы для медленного
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха, ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
Bien, buscaré un mono con 4K.
¿De dónde es esta foto?
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia
FAQ de principiantes MQL5 MT5 MetaTrader 5
Vitaly Muzichenko, 2020.05.13 08:32
Aquí hay 4K y1920x1080
¿De dónde es esta foto?
Enviado desde 4K
Enviado con 4K
Bueno, ¿puede comprobarlo de nuevo, supongo? ¿O no?
Bueno, ¿puede comprobarlo de nuevo, supongo? ¿O no?
No es deseable)
¿Cómo obtener el valor de la versión del programa MQL5 definido por la propiedad# versión?
Resulta que no se puede, porque enlas sustituciones de macros predefinidas
Constante
Descripción
__FECHA__
Fecha en que se compiló el archivo sin tiempo (las horas, los minutos y los segundos son 0)
__DATETIME__
Fecha y hora en que se compiló el archivo
__LINE__
Número de línea en el código fuente donde se encuentra la macro
__FILE__
Nombre del archivo que se está compilando
__PATH__
Ruta absoluta al archivo compilado actual
__FUNCIÓN__
Nombre de la función en cuyo cuerpo se encuentra la macro
__FUNCSIG__
Firma de la función en cuyo cuerpo se encuentra la macro. La descripción de la función con los tipos de parámetros puede ser útil para identificar lasfunciones sobrecargadas
__MQLBUILD__, __MQL5BUILD__
Número de la compilación del compilador
no existe esta variable
¿Cómo obtener el valor de la versión del programa MQL5 definido por la propiedad# versión?
Yo uso esto, no encontré otra opción. Hay que especificar la versión dos veces, pero no es tan difícil
Buenos días, queridos expertos.
¿Podría decirme en qué parte del código hay un error que impide abrir una posición de COMPRA en la misma barra con VENTA que ha cerrado la posición anterior?
Las reglas son sencillas (de aprender):
1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - cruce por indicador rápido 0
Buenas tardes, estimados expertos.
¿Podría decirme en qué parte del código hay un error que impide abrir una posición de COMPRA en la misma barra con VENTA que cerró una posición anterior?
Las reglas son sencillas (de aprender):
1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - indicador rápido que cruza la línea 0
Todo funciona correctamente: las condiciones de apertura cruzan la línea 0 del indicador lento, sólo el indicador rápido cruza la línea 0 en el lugar especificado.
Hay que añadir una condición para abrir una posición en el lugar especificado, lento en la misma zona y rápido cruza la línea 0
Buenos días, queridos expertos.
¿Podría indicar en qué parte del código hay un error que impide que se abra la posición de COMPRA en la misma barra con la de VENTA, que ha cerrado una posición anterior?
Las reglas son sencillas (de aprender):
1 Entrada - indicador lento cruzando 0 + rápido también en la zona (compra/venta)
2 Salida - cruce por indicador rápido 0
Estás cometiendo un grave error: ¡Estás creando DOS INLIKERS POR CADA TICK!
El indicador debe ser creado una vez en OnInit.
Por favor, lea la ayuda deiCustom.