Помощь по кодированию... Как заставить индикатор фильтровать вместо алерта? - страница 5

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ордера размещаются слишком близко к текущей цене покупки/продажи. Ордера должны находиться на определенном расстоянии от текущей цены. Используйте функцию Marketinfo с параметром stop_level для извлечения этой информации и убедитесь, что ваши ордера находятся на таком расстоянии от ask/bid.
Надеюсь, это поможет.
Ордера выставляются слишком близко к текущему бид/аск. Ордера должны находиться на определенном расстоянии от текущей цены. Используйте функцию Marketinfo с параметром stop_level для извлечения этой информации и убедитесь, что ваши ордера находятся на таком расстоянии от ask/bid. Надеюсь, это поможет.
ummm....
Извините, но вы меня потеряли...
Разве я не могу просто разместить ордер на "текущем" уровне? Большинство из того, что я делал до этого момента, было выполнением ордеров на закрытии периода. Можно ли это сделать?
Мне придется сначала узнать, что такое параметр stop_level и функции marketinfo.
спасибо за направление
Если интересно, вот обновление, которое я сделал для индикатора трендовых полос, это было довольно забавно.
вот оно...
Идентификаторрыночной информации, используется с функцией MarketInfo().
Это может быть любое из следующих значений:
MODE_STOPLEVEL 14 Уровень стопа в пунктах.
Так что я предполагаю, что это...
MarketInfo(14)
куда мне его вставить?
или это...
MarketInfo(NULL,MODE_STOPLEVEL);
или...
double bid =MarketInfo(NULL,MODE_BID);
double ask =MarketInfo(NULL,MODE_ASK);
double point =MarketInfo(NULL,MODE_POINT);
Наверное, я не очень понимаю, как это использовать... не могли бы вы показать мне пример?
Вот с чем я работаю в этом случае... Интересно, почему у этого советника раньше не было проблем с выставлением ордеров, а теперь есть? Он работал до того, как я добавил фильтр?
double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);
double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);
// ENTRY
if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)
{
double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position
if(isCrossed == 1 && Ask < upLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
else
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
//###################################################################### the added code starts here
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
else
ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
//###################################################################### ends here
return(0);
}
if(isCrossed == 2 && Ask > LowLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
else
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
//###################################################################### the added code starts here
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
else
ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
//###################################################################### ends here
return(0);
}
return(0);
}
return(0);
}
return(0);
}
}
//+------------------------------------------------------------------+Вы должны использовать MarketInfo(NULL,MODE_STOPLEVEL), чтобы определить, как далеко от текущей цены должны располагаться ваши стоп-ордера. Помните, что он вернет свое значение в пунктах.
Однако вы можете конвертировать в пункты, используя что-то вроде этого:
double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);
Теперь убедитесь, что ваши стоп-приказы находятся как минимум на таком расстоянии от текущей рыночной цены. Кстати, используя NormalizeDouble и Digits, вы конвертируете значение пункта в соответствующие места после десятичной дроби (4 или 2). Это очень хорошая вещь в MT4.
Надеюсь, это поможет.
Maji
Вы должны использовать MarketInfo(NULL,MODE_STOPLEVEL), чтобы определить, как далеко от текущей цены должны располагаться ваши стоп-ордера. Помните, что он возвращает значение в пунктах.
Однако вы можете конвертировать в пункты, используя что-то вроде этого:
double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);
Теперь убедитесь, что ваши стоп-приказы находятся как минимум на таком расстоянии от текущей рыночной цены. Кстати, используя NormalizeDouble и Digits, вы конвертируете значение пункта в соответствующие места после десятичной дроби (4 или 2). Это очень хорошая вещь в MT4.
Надеюсь, это поможет.
MajiЯ не понимаю, почему добавление индикатора в качестве фильтра испортило способ размещения ордеров или стопов. Насколько я могу судить, это ничего не изменило, так почему запрет сделок выше линии изменил способ размещения стоп-приказов?
Если вас не затруднит, пришлите мне по электронной почте текущий код. Я постараюсь взглянуть на него в выходные. Не могу обещать, что у меня все получится, но я честно посмотрю и попробую.
Вот ваша проблема, на которую вы должны обратить внимание в первую очередь
Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points
the corrected code is like that
[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)ну хоть раз это простое решение...
только...
...дело в том, что я изменил его с тех пор, как сделал этот пост.
...Я изменил индикатор с параметром, чтобы сделать полосы более широкими или более узкими, и убрал часть советника, которая делала границу близости к линии. Я подумал, что если бы я мог просто сделать сами торговые полосы узкими или широкими, это дало бы ту же функцию, не будучи настолько сложной, и для меня было бы легче отслеживать мысленно... так что...
сейчас это выглядит так...
double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);
double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);
// ENTRY
if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)
{
double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position
if(isCrossed == 1 && Ask < upLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
elseи ask и uplevel оба в цене, не так ли? это код, который все еще генерирует ошибку. должно быть что-то еще происходит...
Пока что я не вижу никаких проблем (ориентируясь на код).
Но с точки зрения логики, посмотрите на это
if(isCrossed == 1 && Ask < UpLevel)
Вы не проверяете, что они близки, просто цена ниже линии.
Я знал, что он у меня есть!!!
Я проверяю именно то, что вы хотели получить, а в своем предыдущем посте я просто поставил не того советника.
Этот советник может проверить до 4 ТФ, чтобы проверить, если все они получают край в то же время. Вы можете выбрать только один, если хотите.
Вы можете использовать его как пример того, как получить логику из индикатора, и как объединить несколько ТФ вместе.
с уважением,
Eli
Я знал, что он у меня есть!!!
Я проверяю именно то, что вы хотели получить, а в своем предыдущем посте я просто указал не того советника.
Этот советник может проверить до 4 ТФ, чтобы проверить, все ли они получают преимущество в одно и то же время. Вы можете выбрать только один, если хотите.
Вы можете использовать его как пример того, как получить логику из индикатора, и как объединить несколько ТФ вместе.
с уважением
EliЭто интригующе
Я еще не исследовал мульти TF индикаторы, но я верю, что в них есть смысл.