// global double fPreviousBid = 0; // значение bid на предыдущем тике int OnInit() { fPreviousBid = 0; return(INIT_SUCCEEDED); } void OnTick() { // экстремумы предыдущего дня (с зазором) double fUpperLevel = iHigh(Symbol(), PERIOD_D1, 1) + Delta * Point(); double fLowerLevel = iLow(Symbol(), PERIOD_D1, 1) - Delta * Point(); // сигнал - если текущий бид за экстремумами, а на предыдущем тике бид был внутри экстремумов bool bBuySignal = fPreviousBid > 0 && Bid > fUpperLevel && fPreviousBid <= fUpperLevel; bool bSellSignal = fPreviousBid > 0 && Bid < fLowerLevel && fPreviousBid >= fLowerLevel; // запоминаем текущий бид fPreviousBid = Bid;
// торгуем...
}
Сергей, еще такой вопрос:
как вообще запретить торговлю, если цена на текущем дне уже касалась уровеня?
вот, что я имею ввиду
запустил советника в 8 утра, он коснулся экстремума прошлого дня сверху вниз и вошел в селл. Но цена уже отработала этот уровень ночью. Как сделать, что бы сделки в этом направлении сегодня не открывались? В таких случаях лучше вставать в бай
вот мое условие для открытия ордера
fPreviousBid =0;
OpenDayPrice=iOpen(Symbol(),PERIOD_H4,0);
bool bSellSignal = fPreviousBid > 0 && Bid < MinPrice && fPreviousBid >= MinPrice && OpenDayPrice >= MinPrice;
fPreviousBid = Bid;
if (TimeBarSell!=iTime(Symbol(),TimeCandle,0)&& Bid <=MinPrice && Open[0] > MinPrice && bSellSignal){
sell...
}
вот, что я имею ввиду
запустил советника в 8 утра, он коснулся экстремума прошлого дня сверху вниз и вошел в селл. Но цена уже отработала этот уровень ночью. Как сделать, что бы сделки в этом направлении сегодня не открывались? В таких случаях лучше вставать в бай
вот мое условие для открытия ордера
fPreviousBid =0;
OpenDayPrice=iOpen(Symbol(),PERIOD_H4,0);
bool bSellSignal = fPreviousBid > 0 && Bid < MinPrice && fPreviousBid >= MinPrice && OpenDayPrice >= MinPrice;
fPreviousBid = Bid;
if (TimeBarSell!=iTime(Symbol(),TimeCandle,0)&& Bid <=MinPrice && Open[0] > MinPrice && bSellSignal){
sell...
}
Это решение другой задачи.
не вижу там решения.. это подойдет если уде были сделки, а если их не было? как проанализировать касание уровня ценой с начала торговой сессии?
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает флаг торгов сегодня. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isTradeToDay(string sy="", int op=-1, int mn=-1) { int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(True); } } } } } } k=OrdersTotal(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (TimeDay (OrderOpenTime())==Day() && TimeMonth(OrderOpenTime())==Month() && TimeYear (OrderOpenTime())==Year()) return(True); } } } } } } return(False); }
Соответственно ВЫ можете узнать была ли сегодня торговля по BUY SELL
if(isTradeToDay(Symbol(),OP_BUY,-1)) Торговля по BUY сегодня уже была....
Соответственно ВЫ можете узнать была ли сегодня торговля по BUY SELL
if(isTradeToDay(Symbol(),OP_BUY,-1)) Торговля по BUY сегодня уже была....
нужно определить: было ли касание ценой заданного уровня.
double уровень = 1.2000; bool касалось = (iHigh(_Symbol, PERIOD_D1, 0) <= уровень && iLow(_Symbol, PERIOD_D1, 0) >= уровень); Alert("касалось = ", касалось);
.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги,
написал советника на основе пробоя максимумов предыдущего дня. Проблема в том, что при переносе советника на график, он сразу открывает позицию, если цена находится выше максимума предыдущего дня или ниже лоу предыдущего дня. Необходимо составить условие: не торговать если цена находится выше максимума предыдущего дня или ниже лоу предыдущего дня и это первый запуск советника. Нужно дождаться, когда цена вернётся в корридор и только после этого влючать торговлю.
Сейчас условия для открытия ордеров такие:
if(Bid > HighD1+Delta*Point) Open_Bay = true;
if(Bid < LowD1-Delta*Point) Open_Sell = true;