Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 372

 
Ekburg:

и что?! работает?:)


ну, да. Можешь сам проверить=) выставляешь сумму выше 700 долларов и тестируешь=) 5 минутный интервал

Можно ещё его и модифицировать и сделать так что бы он каждую ночь сам запускался=)

 
SpikeOne:


ну, да. Можешь сам проверить=) выставляешь сумму выше 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);

____________________________________________________________________________________________

 
PaMyC:

Здравствуйте.

Только недавно начал заниматься 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:

Глобально:

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
      }
//+----------------------------------------------------------------------------+

 

У меня в коде тоже не просто пункты были а Ценовое значение..

я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?

 
PaMyC:

У меня в коде тоже не просто пункты были а Ценовое значение..

я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?


объясню

Дано:

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 - мне кажется не очень котировка)

просто уберите умножение на поинт и всё)

 
PaMyC:

У меня в коде тоже не просто пункты были а Ценовое значение..

я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?


ТР то у вас норм принтит, но в выставлении ордера Вы, опять же, на поинт умножаете и всё портите..
 
PaMyC:

У меня в коде тоже не просто пункты были а Ценовое значение..

я вроде понимаю что написано в твоем коде но как это должно помочь что то не ясно...?


А может быть получается не большое число, а наоборот, очень маленькое, поэтому тейк у Вас ставиться на 0 или 1
 
vadynik:
Подскажите как сделать виртуальный трелинг, чем заменить OrderModify() ?


У меня есть блок с трейлингом для робота, как обычного так и собственный специфический (для новостных движений)

Могу скинуть, но разбираться Вам)

 
Ekburg:

ТР то у вас норм принтит, но в выставлении ордера Вы, опять же, на поинт умножаете и всё портите..


Огромное спасибо помогло), просто убрал поинт и чудеса все готово))))

как и думал что ошибка очень маленькая, но настолько противная...

Причина обращения: