He hecho un script que cambia el tamaño del stop loss a 200 pips, pero hay un error en lugar de mover el stop
//+------------------------------------------------------------------+//| traling.mq5 |//| Copyright 2011, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2011, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+double BuyStoploss=200;
double SellStoploss=200;
double sl,tp;
voidOnStart()
{
//---MqlTradeRequest m_request;
MqlTradeResult m_result;
if(PositionSelect(_Symbol))
{
//--- если позиция buyif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
//--- получаем значение стоплосс для позиции buy
sl=BuyStoploss;
//--- определяем допустимый уровень установки стоплосс для позиции buydouble minimal=SymbolInfoDouble(_Symbol,SYMBOL_BID)-_Point*SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
//--- нормализация значения
sl=NormalizeDouble(sl,_Digits);
//--- нормализация значения
minimal=NormalizeDouble(minimal,_Digits);
//--- если на полученный от индикатора уровень невозможно установить стоплосс, // он будет установлен на ближайший возможный уровень
sl=MathMin(sl,minimal);
//--- значение стоплосс позицииdouble possl=PositionGetDouble(POSITION_SL);
//--- нормализация значения
possl=NormalizeDouble(possl,_Digits);
//--- если новое значение стоплосс выше, чем текущее значение стоплосс, // будет выполнена попытка переместить стоплосс на новый уровеньif(sl>possl|| possl==0)
{
//--- заполнение структуры запроса
m_request.sl=sl;
//--- заполнение структуры запроса
m_request.tp=PositionGetDouble(POSITION_TP);
//--- запросOrderSend(m_request,m_result);
//--- проверка результата выполнения запросаif(m_result.retcode!=TRADE_RETCODE_DONE)
{
//--- вывод в журнал сообщения об ошибке printf("Не удалось переместить стоплосс позиции %s, ошибка: %I64u",_Symbol,m_result.retcode);
//--- не удалось переместить стоплосс, завершаем выполнение//return(false);
}
}
}
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
sl=SellStoploss;
//--- прибавляется спред, поскольку sell закрывается по цене Ask
sl+=(SymbolInfoDouble(_Symbol,SYMBOL_ASK)-SymbolInfoDouble(_Symbol,SYMBOL_BID));
double minimal=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+_Point*SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
sl=NormalizeDouble(sl,_Digits);
minimal=NormalizeDouble(minimal,_Digits);
sl=MathMax(sl,minimal);
double possl=PositionGetDouble(POSITION_SL);
possl=NormalizeDouble(possl,_Digits);
if(sl<possl || possl==0)
{
m_request.sl=sl;
m_request.tp=PositionGetDouble(POSITION_TP);
OrderSend(m_request,m_result);
if(m_result.retcode!=TRADE_RETCODE_DONE)
{
printf("Не удалось переместить стоплосс позиции %s, ошибка: %I64u",_Symbol,m_result.retcode);
//return(false);
}
}
}
}
}
//+------------------------------------------------------------------+
Hola a todos. ¿Puede decirme si hay un Asesor Experto para este sistema?
Creo que se llama "seguir la tendencia".
- La posición larga se abrirá si el precio de cierre es superior al precio máximo de las últimas 20 barras;
- cerrar una posición larga si el precio de cierre está por debajo del precio mínimo de las últimas 10 barras;
- abrir una posición corta si el precio de cierre es inferior al precio mínimo de las últimas 20 barras; cerrar una posición corta si el precio de cierre es inferior al precio mínimo de las últimas 10 barras
- cerrar una posición corta si el precio de cierre está por encima del precio máximo de las últimas 10 barras.
¿O tal vez personas amables puedan ayudarte a escribirlo?
Tengo una pregunta, no me he decidido a crear un hilo aparte por ello, espero que el autor no se ofenda y la pregunta no se pierda.
La pregunta se refiere a los Módulos de Señales de Trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal y tomemos por ejemplo la descripción de las señales MACD"Divergencia - la primera depresión del oscilador analizada es menos profunda que la anterior y la correspondiente depresión del precio es más profunda que la anterior" - es interesante mirar el código cómo se busca esta señal. Abrimos SignalMACD.mqh pero en su lugar hay condiciones IS_PATTERN_USAGE(0) y así sucesivamente.
¿Cómo puedo ver el código de cómo se busca la divergencia en sí? Es decir, cómo se ve la comparación de una vela con otro indicador en una barra, ¿dónde está este código?
Tengo una pregunta, espero que el autor no se ofenda y la pregunta no se pierda.
La pregunta se refiere a los Módulos de Señales de Trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal y tomemos por ejemplo la descripción de las señales MACD"Divergencia - la primera depresión del oscilador analizada es menos profunda que la anterior y la correspondiente depresión del precio es más profunda que la anterior" - es interesante mirar el código cómo se busca esta señal. Abrimos SignalMACD.mqh pero en su lugar hay condiciones IS_PATTERN_USAGE(0) y así sucesivamente.
¿Cómo puedo ver el código de cómo se busca la divergencia en sí? Es decir, cómo se ve la comparación de una vela con otro indicador en una barra, ¿dónde está este código?
Puede ver el código en el código fuente. Hay dos métodos para buscar la divergencia:
1. El método bool CSignalMACD::ExtState(int ind) - prepara los datos para la búsqueda;
2. El método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) busca un modelo de mercado con los parámetros especificados.
Si te sirve de ayuda, aquí tienes los comentarios a los métodos en ruso:
Para el método bool CSignalMACD::ExtState(int ind)
//--- результатом работы этого метода является битовая карта экстремумов//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей//--- каждый "элемент массива" однозначно описывает соотношение//--- текущих экстремумов осцилятора и цены с предыдущими//--- назначение битов элемента анализируемой битовой карты//--- бит 3 - не используется (всегда 0)//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- бит 1 - не используется (всегда 0)//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- кроме того, формируются://--- массив значений экстремумов осцилятора,//--- массив значений экстремумов цены и//--- массив "расстояний" между экстремумами осцилятора (в барах)//--- следует отметить, что при использовании результатов расширенной проверки состояния,//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)//--- если первым был обнаружен пик, то чётные элементы всех массивов//--- будут содержать данные о пиках, нечётный данные о впадинах//--- если первой была обнаружена впадина, соответственно, наоборот
Para el método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)
//--- битовая карта образца представляет собой "массив" 4-битовых полей//--- каждый "элемент массива" однозначно описывает искомое соотношение//--- текущих экстремумов осцилятора и цены с предыдущими//--- назначение битов элемента образца битовой карты//--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора//--- имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2//--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего//--- (текущий пик более высокий или текущая впадина более глубокая)//--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий//--- (текущий пик менее высокий или текущая впадина менее глубокая)//--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены//--- имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0//--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего//--- (текущий пик более высокий или текущая впадина более глубокая)//--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий//--- (текущий пик менее высокий или текущая впадина менее глубокая)
He hecho un script que cambia el tamaño del stop loss a 200 pips, pero hay un error en lugar de mover el stop
He hecho un script que cambia el tamaño del stop loss a 200 pips, pero hay un error en lugar de mover el stop
Aquí. Simplificado y añadido un mensaje sobre lo que SL y TP el script está tratando de hacer. Los topes ya están en los precios
Pero no pasa nada.
Creo que se llama "seguir la tendencia".
- La posición larga se abrirá si el precio de cierre es superior al precio máximo de las últimas 20 barras;
- cerrar una posición larga si el precio de cierre está por debajo del precio mínimo de las últimas 10 barras;
- abrir una posición corta si el precio de cierre es inferior al precio mínimo de las últimas 20 barras; cerrar una posición corta si el precio de cierre es inferior al precio mínimo de las últimas 10 barras
- cerrar una posición corta si el precio de cierre está por encima del precio máximo de las últimas 10 barras.
¿O tal vez personas amables puedan ayudarte a escribirlo?
La modificación de las paradas requiere incluir ciertos campos en la consulta:
Aquí es donde su parada debe cambiar después de dicha solicitud.
Tengo una pregunta, no me he decidido a crear un hilo aparte por ello, espero que el autor no se ofenda y la pregunta no se pierda.
La pregunta se refiere a los Módulos de Señales de Trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal y tomemos por ejemplo la descripción de las señales MACD"Divergencia - la primera depresión del oscilador analizada es menos profunda que la anterior y la correspondiente depresión del precio es más profunda que la anterior" - es interesante mirar el código cómo se busca esta señal. Abrimos SignalMACD.mqh pero en su lugar hay condiciones IS_PATTERN_USAGE(0) y así sucesivamente.
¿Cómo puedo ver el código de cómo se busca la divergencia en sí? Es decir, cómo se ve la comparación de una vela con otro indicador en una barra, ¿dónde está este código?
Algunos CC en cuentas reales asignan todo tipo de prefijos como "." o "FXF" a los nombres de los símbolos.
¿Cómo puedo utilizar estos prefijos?
Lo hice así:
#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -no funciona
string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -tampoco funciona así
como resultado obtengo sólo FXF en lugar de AUDCADFXF.
¿Puede decirme cómo hacerlo?
Tengo una pregunta, espero que el autor no se ofenda y la pregunta no se pierda.
La pregunta se refiere a los Módulos de Señales de Trading - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal y tomemos por ejemplo la descripción de las señales MACD"Divergencia - la primera depresión del oscilador analizada es menos profunda que la anterior y la correspondiente depresión del precio es más profunda que la anterior" - es interesante mirar el código cómo se busca esta señal. Abrimos SignalMACD.mqh pero en su lugar hay condiciones IS_PATTERN_USAGE(0) y así sucesivamente.
¿Cómo puedo ver el código de cómo se busca la divergencia en sí? Es decir, cómo se ve la comparación de una vela con otro indicador en una barra, ¿dónde está este código?
Puede ver el código en el código fuente. Hay dos métodos para buscar la divergencia:
1. El método bool CSignalMACD::ExtState(int ind) - prepara los datos para la búsqueda;
2. El método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) busca un modelo de mercado con los parámetros especificados.
Si te sirve de ayuda, aquí tienes los comentarios a los métodos en ruso:
Para el método bool CSignalMACD::ExtState(int ind)
Para el método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)