Советник не открывает позиции - страница 3

 

Оказывается не получается модифицировать ордера на следующем тике после открытия. Сначала пробовал модифицировать после остановки  Sleep.

Сейчас, если ждать 10 тиков после открытия, то некоторые ордера уже не модифицируются, так как в этом случае, бывает, стопы становятся уже близко. Вот проблемма-то!

 

Я  использую вот такую функцию.

Работает как часики.

//Для  открытие позиций в условиях рыночного
// исполнения торговых заявок Market Watch
int WHCOrderSend(string symbol, 
                 int cmd, 
                 double volume, 
                 double price, 
                 int slippage, 
                 double stoploss, 
                 double takeprofit, 
                 string comment, 
                 int magic, 
                 datetime expiration, 
                 color arrow_color)
{
   int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0,
                      0, comment, magic, expiration, arrow_color);   
   int check = -1;
   if (ticket > 0 && (stoploss != 0 || takeprofit != 0))  {
   if (!OrderModify(ticket, price, stoploss, takeprofit,
                               expiration, arrow_color))  {
                               check = GetLastError();
                               if (check != ERR_NO_ERROR) {
   Print("OrderModify error: ", ErrorDescription(check));
   } } } else {
   check = GetLastError();      if (check != ERR_NO_ERROR){
   Print("OrderSend error: ",ErrorDescription(check));
   } } return (ticket);}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж


Если внешние параметы и глоб. переменные заданы вот так:

extern int      StopLoss=4450;
extern int      TakeProfit=1050;
//--------------------
double SL,TP;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>



То открываются позиции :

if ( если условия соотв-ют заданным ){
SL=0;TP=0;
if(StopLoss>0)   SL=Bid+Point*StopLoss;
if(TakeProfit>0) TP=Bid-Point*TakeProfit;   
ticket=WHCOrderSend(Symbol(),OP_SELL,Lots_,Bid,3,SL,TP,
                 "Хи-Хи, тра-ля-ля",Magic_,0,Red);
if(ticket < 0){Print("Ошибка открытия ордера SELL #", GetLastError()); 
                Sleep(10000);   return (0);  }

   }

Аналогично, для бай.

 

Тут получается ордера открываются, если советник торгует только на терминале  WHC. Мне тут говорят, что и на других терминалах бывает проблемма открытия ордеров со стопами.  Хотелось бы найти более универсальное решение данной проблеммы, чтобы советник торговал без ошибок на всех терминалах

Надеюсь, найдётся более универсальный метод решения данной проблеммы.

Думаю, без логического решения тут не обойтись. А эта функция решает проблемму только для WHC.

 

Эта функция  отлично торгует в любом ДЦ.

С чего вы решили, что только в Броко? (WHC) Где это написано?

Я торгую c её использованием и в Альпари,  и в Лайте, и в 4ю держал счет одно время . ... и т.п.

Но если вам функция не нравится. То возьмите другую. 

Сделанную, возможно, более профессионально. В функциях И.Кима.

Сейчас найду ссыль.

 

Вот, нашёл. 'Полезные функции от KimIV'

Читайте там прямо с первого поста и ниже на этой страничке.

 
rid >>:

Но если вам функция не нравится. То возьмите другую. 

Сделанную, возможно, более профессионально. В функциях И.Кима.

Сейчас найду ссыль.


Да нет,всё нормально. Просто не люблю я громоздкие вещи. Спсибо за функцию.


А почему бы не сделать так :


  if(Bid>Price)
    {
     OrderClose(ticket,Lot,Ask,5,0);
    }


Price - это уровень стопа. Как только цена поднимается выше, то ордер закрывается. И не нужны никакие модификации. А если цена идёт в заданном напрвлении, то там уже дальше по коду идут запланированные модифицирования.

 

 

Лучше так не делать. Иначе при потере связи вы останетесь вообще без стопов и рискуете слить значительные средства.

Вот вам живой пример: Вчера в ДЦ БРОКО вечером на несколько часов пропадала связь (посетители ветки, - не дадут соврать) на всех видах счетов. Уже не первый раз. 

И множество клиентов уже предъявляют претензии, т.к. работали без стопов. 

Со всеми вытекающими...

 
rid >>:

Лучше так не делать. Иначе при потере связи вы останетесь вообще без стопов и рискуете слить значительные средства.

Вот вам живой пример: Вчера в ДЦ БРОКО вечером на несколько часов пропадала связь (посетители форума - не дадут соврать) на всех видах счетов. 

И множество клиентов уже предъявляют претензии, т.к. работали без стопов. 

Со всеми вытекающими...

А какая разница?  Если даже у Вас и стоит стоп, то ДЦ закроет позицию при первой цене после появления связи. Поэтому, мне кажется, что тут разницы нет, стоит стоп или не стоит при потери связи. Или я что-то не то думаю?

 

Если у меня стоит стоп. То я через техподдержку потом потребую закрыть позицию по цене стопа. 

И  это будет сделано.

Если же стопов у меня нет. То техподдержка даже и разговаривать не будет .

//----------------------------------

Не капризничайте. Ведь не зря умные люди писали эти функции. Они востребованы именно для Вашей ситуации

Тем более, что уже всё разжевано живыми примерами. И здесь и в ветке И.Кима. 

 
Спасибо. Буду думать. Просто и так уже 780 строк кода набролось. Усложнять всё не хочется.  Пока я не шибко грамотный чтоб такие функции устанавливать. Буду разбираться, спасибо.
Причина обращения: