Доработка ботов (советников, индикаторов) vol. 2

mobidik

-----
Сделай пожалуйста также ещё двоим.:)

Не совсем понял, ведь торгуют в обе стороны... Быть может, реверс сигналов? Сделал, но это больному не поможет:
 

Вложения

  • 20PRExp-3_Revers.mq4
    9,3 КБ · Просмотры: 77
  • Executer_AO_Revers.mq4
    12,1 КБ · Просмотры: 72
  • Like
Реакции: gek

tyuplyaev

Прохожий
Помогите вставить magic в советник, а то уже 2 дня бьюсь над ним, а он все равно не хочет работать (или все ордера тралит, или вообще не открывает):facepalm:
 

Вложения

  • ProstoSAR.mq4
    3,1 КБ · Просмотры: 69

vlad_123

Местный знаток
Помогите вставить magic в советник, а то уже 2 дня бьюсь над ним, а он все равно не хочет работать (или все ордера тралит, или вообще не открывает):facepalm:
Лови.
Только торговать на Close[0] - это лишь свое эго почёсывать ;)
 

Вложения

  • ProstoSAR_byVlad.mq4
    4,8 КБ · Просмотры: 99

master1964

Новичок форума
Добрый всем день. Помогите решить один вопрос. Открыты графики 7 пар. На всех установлен советник-помощник (писал сам). При определенных условиях советник получает сигнал и открывает торговые ордера (от 1 до 3 шт.) и далее сопровождает данные позиции. В связи с ограниченностью депозита возможна одновременная торговля только по 2-м парам. Как так реализовать, чтобы при открытии позиций по 2-м парам на остальных парах советник прекратил свою работу. Пока делаю это вручную, но при всплеске волатильности не всегда успеваю это сделать (тем более на нескольких терминалах). Сам код не интересует, подскажите просто принцип реализации. С уважением, Владимир.
 

vlad_123

Местный знаток
Сам код не интересует, подскажите просто принцип реализации. С уважением, Владимир.
Выставляй лок используя глобальную переменную - чтобы несколько советников одновременно не стали выполнять OrderSend до его окончания и появления нового ордера. Т.е. проверяешь - если нет переменной, то создаешь и продолжаешь выставление ордера; если есть переменная - sleep и проверяешь переменную заново.
Затем - считай активные ордера с твоим Magic'ом (можно дополнительно проверять, что у них другой Symbol).
Если выставил переменную, и кол-во активных ордером <лимита - выставляешь новый ордер, затем удаляешь лок-переменную.
 

master1964

Новичок форума
Выставляй лок используя глобальную переменную
Точно. Совсем забыл про глобальные переменные :not-good:, а ведь с их помощью и можно организовать неплохой счетчик открытых ордеров для всех копий советника. Спасибо vlad_123 :embrace:, буду реализовывать. С уважением, Владимир.
 

vlad_123

Местный знаток
Точно. Совсем забыл про глобальные переменные :not-good:, а ведь с их помощью и можно организовать неплохой счетчик открытых ордеров для всех копий советника. Спасибо vlad_123 :embrace:, буду реализовывать. С уважением, Владимир.
Как раз-таки открытые ордера посчитать не проблема - бери и считай ;)
Проблема - как не навыставлять кучу ордеров одновременно на нескольких парах.
 

andrej55

Интересующийся
Приветствую Всех! помогите пожалуйста в индикаторе сделать настройку запуска по GMT. сейчас ставит в 00-00 по терминалу а нужно менять на закрытие пиндосов к тому же во многих терминалах разное открытие. Спасибо!
 

Вложения

  • TO_3.mq4
    4,4 КБ · Просмотры: 68
  • TO_3.ex4
    12 КБ · Просмотры: 43

master1964

Новичок форума
Как раз-таки открытые ордера посчитать не проблема - бери и считай ;)
Проблема - как не навыставлять кучу ордеров одновременно на нескольких парах.
У меня как раз это и не проблема. Первый ордер выставляется по определенному алгоритму, к которому код больше не обращается (после открытого ордера). Вот там и увеличу на 1 глобальную переменную. Следующее увеличение на 1 возможно только на другой паре. При значении глобальной переменной >1 возникает запрет на открытие ордеров по всем парам. А уже открытые ордера обрабатываются по другому алгоритму. Сейчас закодю и погоняю. С уважением, Владимир.
 

Timjum

Интересующийся
Уважаемые программисты! Прошу вас, сделайте так, чтобы второй и последующие ордера в цикле советник открывал как на таймфрейме H1 , а первый в зависимости от таймфрейма.
 

Вложения

  • ShockBar v.1.1++.mq4
    26,9 КБ · Просмотры: 44

alexey1979621

Активный участник
Всем привет! Столкнулся с проблемой.

Использую функцию OrderSelect для определения прибили/убытка последних 3-х ордеров.

В тесторе GetLastError() выдает ошибку №4051
В чем может быть причина?


for(int i=OrdersHistoryTotal(); i>OrdersHistoryTotal()-3; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false)
{
Print("motherfucker ERROR.....",GetLastError());
continue;
}
if ((OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) && (OrderSymbol()==Symbol()) && OrderMagicNumber()==Magic)
{
 

vlad_123

Местный знаток
Всем привет! Столкнулся с проблемой.

Использую функцию OrderSelect для определения прибили/убытка последних 3-х ордеров.

В тесторе GetLastError() выдает ошибку №4051
В чем может быть причина?


for(int i=OrdersHistoryTotal(); i>OrdersHistoryTotal()-3; i--)
Нужно:
for(int i=OrdersHistoryTotal()-1; i>OrdersHistoryTotal()-4; i--
Ордера нумеруются от 0 до Total-1
И проверять, что OrdersHistoryTotal()-4 >= 0
 
Последнее редактирование:

kpll

Элитный участник
Ребят, еще раз прошу вас, помогите с индюком. Есть проблема: вот этот индикатор, при переходе через ноль звенит не переставая. А если на нескольких парах , то такой перезвон стоит, что или терминал приходится выключать или ТФ менять, т.е. работа с ним прекращается. Можете сделать так, чтобы этот индикатор, при переходе через ноль, давал 3 звонка на текущем баре и еще один после закрытия бара ? Алерт реально нужен, мозг отрывает трезвоном, аж динамики хрипеть начинают. (Ну или хотя бы чтоб один сигнал давал на текущем баре и заткнулся).

Это так было задумано, чтобы трейдер не спал на работе!:laugh:
 

Milevshi

Активный участник
ты не прав

Нужно:

Ордера нумеруются от 0 до Total-1
И проверять, что OrdersHistoryTotal()-4 >= 0

Этот вариант я уже пробовал....

То что ты говоришь верно для случая с параметром OrdersTotal (кол-во открытых и отложенных ордеров)

В нашем случае используется OrdersTotalHistory. Он показывает суммарное кол-во ордеров в истории. Можешь проверить через функцию Print.

Поэтому твое предложение, к сожалению, не работает
 

vlad_123

Местный знаток
Вы уверены, что попробовали:
for(int i=OrdersHistoryTotal()-1;
?

Выполните вот это и убедитесь, про что я говорю:
Код:
   for(int i=OrdersHistoryTotal(); i>OrdersHistoryTotal()-3; i--){ 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false) Print("motherfucker ERROR cycle 1.....",GetLastError());
   }
   for(int i=OrdersHistoryTotal()-1; i>OrdersHistoryTotal()-3; i--){ 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false) Print("motherfucker ERROR cycle 2.....",GetLastError());
   }
 

alexey1979621

Активный участник
Вы уверены, что попробовали:

?

Выполните вот это и убедитесь, про что я говорю:
Код:
   for(int i=OrdersHistoryTotal(); i>OrdersHistoryTotal()-3; i--){ 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false) Print("motherfucker ERROR cycle 1.....",GetLastError());
   }
   for(int i=OrdersHistoryTotal()-1; i>OrdersHistoryTotal()-3; i--){ 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==false) Print("motherfucker ERROR cycle 2.....",GetLastError());
   }
Ни тот ни тот вариант не рабоатет. Работает вариант
for(i=ht-1; i>ht-4; i--)
Однако, сделки открываются неправильно. После убыточной серии из трех минусовых ордеров должен открываться ордер с лотом*2, а такой ордер открывается через один.



12 2014.03.06 01:30 close 6 0.10 0.99398 0.00000 0.00000 18.41 1111.30
13 2014.03.06 04:24 sell 7 0.10 0.99615 0.00000 0.00000 0.00 1111.30
14 2014.03.06 14:12 sell 8 0.10 0.99985 0.00000 0.00000 0.00 1111.30
15 2014.03.07 09:42 sell 9 0.10 1.00155 0.00000 0.00000 0.00 1111.30
16 2014.03.10 13:11 close 9 0.10 1.00285 0.00000 0.00000 -10.91 1100.39
17 2014.03.10 13:11 close 8 0.10 1.00285 0.00000 0.00000 -25.01 1075.38
18 2014.03.10 13:11 close 7 0.10 1.00285 0.00000 0.00000 -54.48 1020.90
19 2014.03.10 16:00 buy 10 0.10 1.00209 0.00000 0.00000 0.00 1020.90
20 2014.03.11 01:13 close 10 0.10 1.00399 0.00000 0.00000 15.31 1036.20
21 2014.03.11 01:13 sell 11 0.20 1.00399 0.00000 0.00000 0.00 1036.20
22 2014.03.11 16:00 close 11 0.20 1.00184 0.00000 0.00000 34.25 1070.45
 
Последнее редактирование:

vlad_123

Местный знаток
Ни тот ни тот вариант не рабоатет. Работает вариант
for(i=ht-1; i>ht-4; i--)
Чему равен ht?

Однако, сделки открываются неправильно. После убыточной серии из трех минусовых ордеров должен открываться ордер с лотом*2, а такой ордер открывается через один.
Эта проблема не имеет отношения к ошибке 4051 в OrderSelect, не так ли?
 
Верх