Только недавно начал заниматься Mql4 и Столкнулся с такой проблемой, все никак не получается сделать так чтобы ордер в качестве Тейкпрофита ставил величину предыдущего бара, пробовал и так и сяк... Ордер как издевается не видит переменную и пропускает её мимо.. в итоге ТП встает в 0 или 1 или 2...
пробовал все что в голову приходила не идет.... самое не понятное Если заменяю "TP =" на Print он как миленький все прописывает... Помогите начинающему.... Буду очень благодарен
Только недавно начал заниматься Mql4 и Столкнулся с такой проблемой, все никак не получается сделать так чтобы ордер в качестве Тейкпрофита ставил величину предыдущего бара, пробовал и так и сяк... Ордер как издевается не видит переменную и пропускает её мимо.. в итоге ТП встает в 0 или 1 или 2...
пробовал все что в голову приходила не идет.... самое не понятное Если заменяю "TP =" на Print он как миленький все прописывает... Помогите начинающему.... Буду очень благодарен
тп в OrderSend() - это не количество пунктов, а цена при достижении которой, будет закрыт данный ордер, также при выставлении тп необходимо помнить про уровень заморозки (к каждого дц свои заморочки).
Есть ещё неучтённый StopLevel. А он ещё бывает нулю равен, и тогда высчитывается по-разному. В Альпари, например, он всегда нулевой, но ограничения есть, и они считаются как спред*2
Значит нужно сначала определиться с уровнем StopLevel:
Глобально:
int level=0, sp=0;
Затем в start() :
sp=MarketInfo(sy,MODE_SPREAD);
//-------------- Проверка StopLevel ---------------
level=MarketInfo(sy,MODE_STOPLEVEL ); // Значение уровня установки стоповif (level==0) level=sp*2;
А потом уже сравнивать размер стоп-приказа с полученным уровнем и использовать рассчитанные верные значения для стоп-приказов:
//+----------------------------------------------------------------------------+double pa=MarketInfo(Symbol(),MODE_ASK), // цена Ask
pb=MarketInfo(Symbol(),MODE_BID), // цена Bid
sl=0, tp=0;
if(OrderType()==OP_BUY) {
sl=NormalizeDouble(MathMin(pb-StopLoss*Point,pb-(level+1)*Point),Digits);
tp=NormalizeDouble(MathMax(pb+TakeProfit*Point,pb+(level+1)*Point),Digits);
// далее используем полученные уровни // sl для цены StopLoss // и tp для цены TakeProfit
}
if(OrderType()==OP_SELL) {
sl=NormalizeDouble(MathMax(pa+StopLoss*Point,pa+(level+1)*Point),Digits());
tp=NormalizeDouble(MathMin(pa-TakeProfit*Point,pa-(level+1)*Point),Digits());
// далее используем полученные уровни // sl для цены StopLoss // и tp для цены TakeProfit
}
//+----------------------------------------------------------------------------+
и что?! работает?:)
ну, да. Можешь сам проверить=) выставляешь сумму выше 700 долларов и тестируешь=) 5 минутный интервал
Можно ещё его и модифицировать и сделать так что бы он каждую ночь сам запускался=)
ну, да. Можешь сам проверить=) выставляешь сумму выше 700 долларов и тестируешь=) 5 минутный интервал
Можно ещё его и модифицировать и сделать так что бы он каждую ночь сам запускался=)
Ясно)) Ну удачи тогда в покорении профитных высот))
Здравствуйте.
Только недавно начал заниматься Mql4 и Столкнулся с такой проблемой, все никак не получается сделать так чтобы ордер в качестве Тейкпрофита ставил величину предыдущего бара, пробовал и так и сяк... Ордер как издевается не видит переменную и пропускает её мимо.. в итоге ТП встает в 0 или 1 или 2...
пробовал все что в голову приходила не идет.... самое не понятное Если заменяю "TP =" на Print он как миленький все прописывает... Помогите начинающему.... Буду очень благодарен
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 50, 0, (Ask +((High[1]-Low[1])*3)*Point), "", 123, 0, Blue);
_______________________________________________________________________________________
for (int i=1;i<=1;i++)
TP = ((High[i]- Low[i])*3);
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 50, 0, Ask + TP*Point, "", 123, 0, Blue);
____________________________________________________________________________________________
Здравствуйте.
Только недавно начал заниматься Mql4 и Столкнулся с такой проблемой, все никак не получается сделать так чтобы ордер в качестве Тейкпрофита ставил величину предыдущего бара, пробовал и так и сяк... Ордер как издевается не видит переменную и пропускает её мимо.. в итоге ТП встает в 0 или 1 или 2...
пробовал все что в голову приходила не идет.... самое не понятное Если заменяю "TP =" на Print он как миленький все прописывает... Помогите начинающему.... Буду очень благодарен
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 50, 0, (Ask +((High[1]-Low[1])*3)*Point), "", 123, 0, Blue);
_______________________________________________________________________________________
for (int i=1;i<=1;i++)
TP = ((High[i]- Low[i])*3);
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 50, 0, Ask + TP*Point, "", 123, 0, Blue);
____________________________________________________________________________________________
тп в OrderSend() - это не количество пунктов, а цена при достижении которой, будет закрыт данный ордер, также при выставлении тп необходимо помнить про уровень заморозки (к каждого дц свои заморочки).
возможно будет полезно, спасибо Артему.
artmedia70 15.12.2013 22:34 #
Есть ещё неучтённый StopLevel. А он ещё бывает нулю равен, и тогда высчитывается по-разному. В Альпари, например, он всегда нулевой, но ограничения есть, и они считаются как спред*2
Значит нужно сначала определиться с уровнем StopLevel:
Глобально:
Затем в start() :
А потом уже сравнивать размер стоп-приказа с полученным уровнем и использовать рассчитанные верные значения для стоп-приказов:
У меня в коде тоже не просто пункты были а Ценовое значение..
я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?
У меня в коде тоже не просто пункты были а Ценовое значение..
я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?
объясню
Дано:
Low=1.3674
High=1.3811
Ask=1.3734
Ваши расчёты:
Ask +((High[1]-Low[1])*3)*Point = 1.3734+((1.3811-1.3674)*3)*Point = 1.3734+(0.0137*3)*Point = 1.3734+(0.0411)*Point = 1.3734+411 = 412.3734 - мне кажется не очень котировка)
просто уберите умножение на поинт и всё)
У меня в коде тоже не просто пункты были а Ценовое значение..
я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?
ТР то у вас норм принтит, но в выставлении ордера Вы, опять же, на поинт умножаете и всё портите..
У меня в коде тоже не просто пункты были а Ценовое значение..
я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?
А может быть получается не большое число, а наоборот, очень маленькое, поэтому тейк у Вас ставиться на 0 или 1
Подскажите как сделать виртуальный трелинг, чем заменить OrderModify() ?
У меня есть блок с трейлингом для робота, как обычного так и собственный специфический (для новостных движений)
Могу скинуть, но разбираться Вам)
ТР то у вас норм принтит, но в выставлении ордера Вы, опять же, на поинт умножаете и всё портите..
Огромное спасибо помогло), просто убрал поинт и чудеса все готово))))
как и думал что ошибка очень маленькая, но настолько противная...