Ответить
06.07.2015, 06:19
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

Фундаментальный анализ Закрытие лока на откате

Есть необходимость, пережидать сильные просадки выставляя локирующий ордер.
Задача , чтобы именно на откате локирующий ордер закрывался в ноль .
Проблема в том что, не на откате локирующий ордер закрывается в ноль, а при прохождении своего спреда, и таким образом ползёт к сливу депозита.

Помогите написать код, чтобы в первый раз любое условие не отрабатывало, а во второй раз это же условие сработало.

т.е. первое попадание цены в ноль пропустить а на откате попадание в ноль уже закрыть , итд.
06.07.2015, 07:38
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Вариантов на самом деле несколько. Перечислю пару самых простых.
1. Поставить флаг. Если выполнилось условие для закрытия в первый раз флаг переключается. И потом при этом состоянии флага при следующем условии закрытия ордер закрывается и флаг возвращается в исходное положение.
2. Тот-же флаг, но переключение его происходит только при прохождении в профит на определённое количество пунктов.
06.07.2015, 08:23
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Вариантов на самом деле несколько.
Отписал в ЛС.
06.07.2015, 11:13
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Отписал в ЛС.
Но отвечу я здесь.
Если ты учишься программированию, то надо понять написанное и постараться это написать самому. А когда сделаешь тогда и поправим. если где-то будет надо. А вот учить/подсказывать кусками кода не в моих правилах. Дело ещё в том, что это надо расписывать не подряд, а согласно всему алгоритму твоего советника.
Второй вариант, если ты хочешь просто писать из кусочков чужого кода, то это тоже не ко мне. Не обессудь.
06.07.2015, 11:31
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Вот этот модуль , как понял дописал код с флагами, - пока на откате не работает

// если есть ордер хеджирующий - смотрим закрытие его в ноль

bool fl_Buy = false; //флаг для бай
bool fl_Sell = false; //флаг для селл

if(IsHedging==1) //если есть локирующий ордер
{


if(OrderType()==0 && OrderOpenPrice()==Bid && fl_Buy == true) // если цена ордера равна 0 и флаг бай значение 1
{
Print("Второй проход - Закрытие хеджирующего ордера Бай в ноль");
OrderClose(OrderTicket(),OrderLots(),Bid,3,clrNONE );
HedgedTick[MassPos]=0;
HedgingTick[MassPos]=0;
fl_Buy = false; // возращаем флаг в исходное состояние
}
if(OrderType()==0 && OrderOpenPrice()==Bid && fl_Buy == false) {fl_Buy = true ; Print("первый проход, меняем значение флага Бай, теперь значение ==",fl_Buy);}


if(OrderType()==1 && Ask==OrderOpenPrice()&& fl_Sell == true)// если цена ордера равна 0 и флаг селл значение 1
{
Print("Второй проход - Закрытие хеджирующего ордера в ноль");
OrderClose(OrderTicket(),OrderLots(),Ask,3,clrNONE );
HedgedTick[MassPos]=0;
HedgingTick[MassPos]=0;
fl_Sell = false; // возращаем флаг в исходное состояние
}
if(OrderType()==1 && Ask==OrderOpenPrice()&& fl_Sell == false) {fl_Sell = true ; Print("первый проход, меняем значение флага Селл, теперь значение ==",fl_Sell);}

}

Последний раз редактировалось intercool; 06.07.2015 в 12:00.
06.07.2015, 11:58
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
пока не могу понять как написать условие, для возвращающих в исходное состояние флаги fl_Sell = false; и fl_Buy = false; , иначе код по флагам безсмысленный.

Последний раз редактировалось intercool; 06.07.2015 в 12:03.
06.07.2015, 13:55
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Вариантов на самом деле несколько.
2. Тот-же флаг, но переключение его происходит только при прохождении в профит на определённое количество пунктов.
Вот по второму принципу вроде заработало:

// Объявление вынес в глобальные переменные
bool fl_Buy = false; //флаг для бай
bool fl_Sell = false; //флаг для селл
//------------------------------------------------

if(IsHedging==1) //если есть локирующий ордер
{


if(OrderType()==0 && OrderOpenPrice()==Bid && fl_Buy == true) // если цена ордера равна 0 и флаг бай значение 1
{
Print("Второй проход - Закрытие хеджирующего ордера Бай в ноль");
OrderClose(OrderTicket(),OrderLots(),Bid,3,clrNONE );
HedgedTick[MassPos]=0;
HedgingTick[MassPos]=0;
fl_Buy = false; // возращаем флаг в исходное состояние
}
if(OrderType()==0 && OrderOpenPrice()==Bid+3*Point && fl_Buy == false) {fl_Buy = true ; Print("первый проход, меняем значение флага Бай, теперь значение ==",fl_Buy);}


if(OrderType()==1 && Ask == OrderOpenPrice()&& fl_Sell == true)// если цена ордера равна 0 и флаг селл значение 1
{
Print("Второй проход - Закрытие хеджирующего ордера в ноль");
OrderClose(OrderTicket(),OrderLots(),Ask,3,clrNONE );
HedgedTick[MassPos]=0;
HedgingTick[MassPos]=0;
fl_Sell = false; // возращаем флаг в исходное состояние
}
if(OrderType()==1 && Ask-3*Point == OrderOpenPrice()&& fl_Sell == false) {fl_Sell = true ; Print("первый проход, меняем значение флага Селл, теперь значение ==",fl_Sell);}

}

Теперь как только профит (хеджа) преодалеет 3 пунка, флаг переворачивается и скрипт ждет возвращения тренда.
Но я не уверен на 100% в корректности этого кода.
06.07.2015, 16:55
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
Ну вот и всё получилось. Если это четырёхзнак, то 3 пункта наверное достаточно, а для пятизнака я думаю маловато.
Ну а если гложут какие-то сомнения, тестер в руки и при визуализации проверяем что имеем.
И ещё одно замечание:
OrderOpenPrice()==Bid бывает так редко что можно попасть в неприятность. Надо это учитывать и писать OrderOpenPrice() >= Bid или OrderOpenPrice() <= Bid в зависимости от ситуации. И соответственно Bid или Ask
06.07.2015, 17:20
Аватар для intercool
intercool intercool вне форума Интересующийся
Регистрация: 02.11.2013 / Адрес: г.Тюмень / Сообщений: 21
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
если в OrderOpenPrice()==Bid установить не равно , закрытие в ноль не получается
06.07.2015, 19:11
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,660
Поблагодарили 3,789 раз(а) / Репутация: 3781
А скачок цены через цену открытия случается достаточно часто и следовательно ордер не будет закрыт даже в большом минусе.
Ну в общем, со временем ты к этому придёшь сам.
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 17:14. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO