[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 314

 
hoz:

У меня у самого ошибка эта долбаная вылезла. По сути, логики тут нет вообще. Для открытия отложенного ордера согласно требованиям https://book.mql4.com/ru/appendix/limits необходимо, чтоб цена открытия была либо ниже Бида (для продаж), либо выше Аска (для покупок). Делаю, всё согласно требованиям.

 

Периодически, появляется ошбика 0 и 130. Хотя 130-ая ошибка это ошибка неправильного стопа, которая может быть при модификации, а не при открытии ордера.

 На скрине ситуация и принт выведенный на экран по средством функции pr.

 

Подскажите, пожалуйста, как избавиться от этого косяка. Мне эта ошибка уже очень надоела. Логически она вообще не по теме вылезла. 

Виктор, кроме соблюдения выше-ниже и тут нужно использовать превентивный зазор, т.к. пока посылается приказ, цена не стоит на месте, вот и получается зашаг или заступ в запретную зону! Вставь как при модификации и слиппаж побольше, и будет всё в порядке! Работаю на Реале без ошибок! Удачи!
 
borilunad:
Виктор, кроме соблюдения выше-ниже и тут нужно использовать превентивный зазор, т.к. пока посылается приказ, цена не стоит на месте, вот и получается зашаг или заступ в запретную зону! Вставь как при модификации и слиппаж побольше, и будет всё в порядке! Работаю на Реале без ошибок! Удачи!


Борис, так слиппейдж и так 3 стоит, это, как я понимаю 3 пункта. Куда уже больше то?

 Вы имеете ввиду так:

bool OpenBuy()
{
   int ticket = -1;
   double OOP = High[1] + i_thresholdToUp * pt;
   pr ("ND(OOP) = " + ND(OOP) + " ; Ask = " + Ask);
   pr ("g_stopLevel = " + g_stopLevel);

   if ((ND(OOP) - g_stopLevel)> Ask)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0, CLR_NONE);
   else pr ("Ордер послать не удалось " + GetLastError());
   
   if (ticket > 0)
   {
 //      lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                            // .. успешно выполнены
       return (true);
   }
}

  Я думаю как это реализовать грамотнее, чтоб лишние функции сюда не помещать.

 

hoz, у меня пока тут свет отключали, задумался я над тем, как ещё больше сократить if. Смотрите: если поставить переменную

bool _if=((2*trend-1)*Δ≥const);//аналогично _if=(±Δ≥const)

 имеем cnt=cnt+step, где

if(_if) step=1;
}else{ step=-cnt;
}

 Но 1=cnt/cnt, a -cnt=cnt/(-1), разница только в знаменателе. Теперь вспоминаем, что x^0=1, x^1=x, т.е. в показатель можно поставить нашу булеву переменную _if, т.е. step=cnt/a*(cnt^_if); где

if(_if) a=1;
}else{ a=-1;
}

 Но ±а у нас равно по идее 2*_if-1, т.е.

bool _if=((2*trend-1)*Δ≥const);//аналогично _if=(±Δ≥const)
int step=cnt/(2*_if-1)*(cnt^_if);//принимает два значения: 1 и -cnt
cnt=cnt+step;

 Или упрощаем

bool _if=((2*trend-1)*Δ≥const); cnt=cnt+cnt/((2*_if-1)*(cnt^_if));
 
hoz:


Борис, так слиппейдж и так 3 стоит, это, как я понимаю 3 пункта. Куда уже больше то?

 Вы имеете ввиду так:

  Я думаю как это реализовать грамотнее, чтоб лишние функции сюда не помещать.

Надеюсь слиппаж 3 для 4-х знаков, если для 5-и нужны 30!
 

Ребята подскажите скрипт, который выдает сообщение что рынок открылся, и что рынок закрылся.

тоесть когда наступает понедельник 0.00.01 выдает сообщение рынок открывается то выдается сообщение что "рынок открыт", аналогично что рынок закрылся.

написал скриптик но почему то не работает (( помогите разобраться.

// определяем начало и конец торгов.
      // начало торгов в понедельник в 0.00.01
      
      if(DayOfWeek()==1 && Hour()== 0 && Minute()== 0 && Seconds()==01)
      {
         Alert("Рынок открылся.");
      }
      // конец торгов в Пятницу в 23.59.59
      if(DayOfWeek()==5 && Hour()== 23 && Minute()== 59 && Seconds()==59)
      {
         Alert("Пятница, Рынок закрылся.");
      }

 

Существует  ли  какой  нибудь  робот , способный  выставлять  отложенные  ордера  БАЙ  СТОП   и   СЕЛЛ  СТОП   одновременно   в   определенный  момент   времени ,  с  минимальным  шагом срабатывания  от  цены  на  тот  момент  времени. Короче  под  новость. Руками  не  успеваю.
 
hoz:

У меня у самого ошибка эта долбаная вылезла. По сути, логики тут нет вообще. Для открытия отложенного ордера согласно требованиям https://book.mql4.com/ru/appendix/limits необходимо, чтоб цена открытия была либо ниже Бида (для продаж), либо выше Аска (для покупок). Делаю, всё согласно требованиям.

 

Периодически, появляется ошбика 0 и 130. Хотя 130-ая ошибка это ошибка неправильного стопа, которая может быть при модификации, а не при открытии ордера.

 На скрине ситуация и принт выведенный на экран по средством функции pr.

 

Подскажите, пожалуйста, как избавиться от этого косяка. Мне эта ошибка уже очень надоела. Логически она вообще не по теме вылезла. 

130-я ошибка - это не обязательно стоп-приказы. Это ещё и дистанция установки отложенных ордеров на расстоянии не менее int MarketInfo(Symbol(), MODE_STOPLEVEL)
 
borilunad:
Надеюсь слиппаж 3 для 4-х знаков, если для 5-и нужны 30!

 Так в тестере вообще проскальзываний нет, если уж на то пошло... Исправил на 30.

 

artmedia70:
130-я ошибка - это не обязательно стоп-приказы. Это ещё и дистанция установки отложенных ордеров на расстоянии не менее int MarketInfo(Symbol(), MODE_STOPLEVEL)

 Ну вот:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = High[1] + i_thresholdToUp * pt;
   pr ("ND(OOP) = " + ND(OOP) + " ; Ask = " + Ask);
   pr ("g_stopLevel = " + g_stopLevel);

   if (ND(OOP)> (Ask + g_stopLevel))
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   else pr ("Ордер послать не удалось " + GetLastError());
   
   if (ticket > 0)
   {
 //      lastBarTime = Time[0];               // На текущем баре все необходимые действия..
                                            // .. успешно выполнены
       return (true);
   }
}

 где:

g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * pt;

 Написано всё так же, как и у Вас Артём. Ещё вчера так же по логике было. Но ошибки сыпятся. Накидывать лишние пункты, чтоб работало в тестере, где нет ни реквот, ни проскальзываний вообще нет смысла.

 Как тут поступить универсальнее, чтоб больше не натыкаться на те же грабли. Ведь сколько не встречал советников, ни где не накидывают лишнии 2-3пп кроме слиппейджа. Ведь тогда выйдет 6пп. отклонение от требуемой цены. А это уже не точно. Пишут же советники и для тиков, и для минуток. И видимо точность в торговле может быть. Вот и хочется, чтоб точность присуствовала, а не никадывать отступы огромные...

 

Други!

возник глобальный вопрос

можно ли каким либо образом получить в терминале поток тиков в выходные, что бы можно было песать и отлаживать советника спокойно?

ибо нормально писать в будни оченб сложно, работа/торги и т.д.

один тик запускающий советника не подходит, нужен именно поток тиков в определенном диапазоне

 есть вообще такое в природе?

 сервера мт4 эмулирующие поток котировок в выходные ?

 
pasha5282:

Ребята подскажите скрипт, который выдает сообщение что рынок открылся, и что рынок закрылся.

тоесть когда наступает понедельник 0.00.01 выдает сообщение рынок открывается то выдается сообщение что "рынок открыт", аналогично что рынок закрылся.

написал скриптик но почему то не работает (( помогите разобраться.


если это именно скрипт, и лежит он в папке scpirts, то он отработал один раз и снялся с графика. Чтоб оставить его насовсем впишите ваш код внутрь вот этого


int start()
{
   while(!IsStopped())
   {
      // вот сюда

      Sleep(500);
   }
}
Причина обращения: