Я ту сделал скрипт, который меняет размер стоп-лосса на отметку 200 пунктов, но что-то ошибка вместо переноса стопа
//+------------------------------------------------------------------+//| 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);
}
}
}
}
}
//+------------------------------------------------------------------+
У меня вопрос, не стал из-за него создавать отдельную тему, надеюсь автор не обидеться а сам вопрос не потеряется.
Вопрос по поводу Модулей торговых сигналов - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal и например возьмем описание сигналов MACD "Дивергенция — первая анализируемая впадина осциллятора мельче предыдущей, а соответствующая ей впадина цены глубже предыдущей" - интересно взглянуть на код как ищется этот сигнал, открываем файл SignalMACD.mqh а там вместо условий IS_PATTERN_USAGE(0) и так далее.
Как посмотреть код как ищется сама дивергенция? То есть как выглядит сравнение одной свечи с другой индикатора на одном баре на другом, где этот код?
У меня вопрос, не стал из-за него создавать отдельную тему, надеюсь автор не обидеться а сам вопрос не потеряется.
Вопрос по поводу Модулей торговых сигналов - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal и например возьмем описание сигналов MACD "Дивергенция — первая анализируемая впадина осциллятора мельче предыдущей, а соответствующая ей впадина цены глубже предыдущей" - интересно взглянуть на код как ищется этот сигнал, открываем файл SignalMACD.mqh а там вместо условий IS_PATTERN_USAGE(0) и так далее.
Как посмотреть код как ищется сама дивергенция? То есть как выглядит сравнение одной свечи с другой индикатора на одном баре на другом, где этот код?
Посмотреть код можно в исходнике. Для поиска дивергенции используются два метода:
1. Метод bool CSignalMACD::ExtState(int ind) - подготавливает данные для поиска;
2. Метод bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - ищет рыночную модель с указанными параметрами.
Если поможет, вот комментарии к методам на русском языке:
Для метода bool CSignalMACD::ExtState(int ind)
//--- результатом работы этого метода является битовая карта экстремумов//--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей//--- каждый "элемент массива" однозначно описывает соотношение//--- текущих экстремумов осцилятора и цены с предыдущими//--- назначение битов элемента анализируемой битовой карты//--- бит 3 - не используется (всегда 0)//--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- бит 1 - не используется (всегда 0)//--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего//--- (более высокий пик или более глубокая впадина), иначе 0//--- кроме того, формируются://--- массив значений экстремумов осцилятора,//--- массив значений экстремумов цены и//--- массив "расстояний" между экстремумами осцилятора (в барах)//--- следует отметить, что при использовании результатов расширенной проверки состояния,//--- нужно учитывать, какой экстремум осцилятора (пик или впадина)//--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым)//--- если первым был обнаружен пик, то чётные элементы всех массивов//--- будут содержать данные о пиках, нечётный данные о впадинах//--- если первой была обнаружена впадина, соответственно, наоборот
Для метода 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 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий//--- (текущий пик менее высокий или текущая впадина менее глубокая)
Я ту сделал скрипт, который меняет размер стоп-лосса на отметку 200 пунктов, но что-то ошибка вместо переноса стопа
Я ту сделал скрипт, который меняет размер стоп-лосса на отметку 200 пунктов, но что-то ошибка вместо переноса стопа
Вот. Упростил и добавил сообщение о том, какой СЛ и ТП скрипт пытается сделать. Стопы уже в ценах
Но ничего не происходит
Вроде она называется «следующий за трендом»
• открытие длинной позиции производим, если цена закрытия выше максимальной цены за последние 20 бар;
• закрытие длинной позиции производим, если цена закрытия ниже минимальной цены за последние 10 бар;
• открытие короткой позиции производим, если цена закрытия ниже минимальной цены за последние 20 бар;
• закрытие короткой позиции производим, если цена закрытия выше максимальной цены за последние 10 бар.
Или может быть добрые люди помогут ее написать?
Модификация стопов требует включать в запрос определенные поля:
Вот после такого запроса Ваш стоп должен измениться.
У меня вопрос, не стал из-за него создавать отдельную тему, надеюсь автор не обидеться а сам вопрос не потеряется.
Вопрос по поводу Модулей торговых сигналов - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal и например возьмем описание сигналов MACD "Дивергенция — первая анализируемая впадина осциллятора мельче предыдущей, а соответствующая ей впадина цены глубже предыдущей" - интересно взглянуть на код как ищется этот сигнал, открываем файл SignalMACD.mqh а там вместо условий IS_PATTERN_USAGE(0) и так далее.
Как посмотреть код как ищется сама дивергенция? То есть как выглядит сравнение одной свечи с другой индикатора на одном баре на другом, где этот код?
Некоторые ДЦ на реальных счетах именам символов присваивают всякие префиксы типа "." или "FXF".
Как мне подставлять эти префиксы?
я делал так:
#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD"DEF_SPEC ... -так не выходит
string SymbolsTrade[] = {"AUDCAD"+DEF_SPEC ... -и так тоже не получается
в итоге вместо нужного AUDCADFXF получаю просто FXF.
Не подскажите как это реализовать?
У меня вопрос, не стал из-за него создавать отдельную тему, надеюсь автор не обидеться а сам вопрос не потеряется.
Вопрос по поводу Модулей торговых сигналов - https://www.mql5.com/ru/docs/standardlibrary/expertclasses/csignal и например возьмем описание сигналов MACD "Дивергенция — первая анализируемая впадина осциллятора мельче предыдущей, а соответствующая ей впадина цены глубже предыдущей" - интересно взглянуть на код как ищется этот сигнал, открываем файл SignalMACD.mqh а там вместо условий IS_PATTERN_USAGE(0) и так далее.
Как посмотреть код как ищется сама дивергенция? То есть как выглядит сравнение одной свечи с другой индикатора на одном баре на другом, где этот код?
Посмотреть код можно в исходнике. Для поиска дивергенции используются два метода:
1. Метод bool CSignalMACD::ExtState(int ind) - подготавливает данные для поиска;
2. Метод bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - ищет рыночную модель с указанными параметрами.
Если поможет, вот комментарии к методам на русском языке:
Для метода bool CSignalMACD::ExtState(int ind)
Для метода bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)