Нужна помощь! Открывает много ордеров советник. - страница 2

 
RVSm:

На всю нашу торговлю руками можно сделать советник, только разная степень сложности и всё)

У вас задача элементарнейшей сложности. Если вы не можете её решить с помощью:
1. Справка
2. Поиск по форуму
3. Здравый смысл
То наверное не хватает чего то другого, общих знаний может.
Вы сами же написали причину проблемы. Решений масса, нужно чтобы если ордер открылся то больше не открывать. Просто же да?
 
 
Aleksey Mavrin:
У вас задача элементарнейшей сложности. Если вы не можете её решить с помощью:
1. Справка
2. Поиск по форуму
3. Здравый смысл
То наверное не хватает чего то другого, общих знаний может.
Вы сами же написали причину проблемы. Решений масса, нужно чтобы если ордер открылся то больше не открывать. Просто же да?
 

Да, мне не хватает знаний, потому что я относительно начинающий программист в данном коде. Для этого я и обратился сюда, чтобы подсказали, помогли, посоветовали литературу может быть. Ибо подсказать мне больше некому, к сожалению.

И да, по поводу ордеров, да, я сам написал причину проблемы, но при этом не знаю как решить эту проблему. Парадокс... Можете подсказать хотя бы одно из "массы решений"?  Заранее спасибо!

 
RVSm:

Да, мне не хватает знаний, потому что я относительно начинающий программист в данном коде. Для этого я и обратился сюда, чтобы подсказали, помогли, посоветовали литературу может быть. Ибо подсказать мне больше некому, к сожалению.

И да, по поводу ордеров, да, я сам написал причину проблемы, но при этом не знаю как решить эту проблему. Парадокс... Можете подсказать хотя бы одно из "массы решений"?  Заранее спасибо!

ДА вам уже написали самое простое решение. Ну да, на каждом тике открывается ордер. Если вам нужен всего один, тогда при открытии проверьте - если есть уже открытый, то открывать больше не надо. См. OrdersTotal и прочие функции Order...

Или булевый флаг ставить если успешно открылся, потом проверять флаг или снимать его по времени (если например вам надо один ордер в час/день), зависит от логики вашей системы.

Дальше вы всё должны узнать сами, иначе не получиться освоить, ум должен быть пытливым и ищущим :). Источники я вам уже указал, да ещё и тут ответили не раз.

 
Проще посмотреть ряд лекций по С++ а после преступать к написанию роботов. Если же пройденный этап - то мануалы по MQL5 штудировать и запускать в тестере в режиме дебагинга)
 
RVSm:
Прошу прощения, не могли бы вы подсказать? Как? :З

есть простая функция подсчета открытых ордеров, пример:

//+------------------------------------------------------------------+
//|  Описание : Функция ведет подсчет открытых или отложеных позиций |
//|            с задаными параметрами.                               |
//|  Параметры:                                                      |
//|            symbol - Наименование тогового инструмента            |
//|                     (NULL текущий торговый инструмент);          |
//|            cmd    - Торговая операция (При значении -1 будет     |
//|                     обрабатываться любая позиция);               |
//|            magic  - Номер индентификатора торгового советника    |
//|                     (NULL любой номер).                          |
//|  Версия от: 01.10.2019                                           |
//+------------------------------------------------------------------+
int CountOpenOrders(string          symbol = NULL, /* Торговый инструмент */
                    ENUM_ORDER_TYPE cmd    = -1,   /* Торговая операция */
                    int             magic  = NULL  /* Идентификатор */)
{
//--- Проверим торговый инстремент (символ)... -----------------------
if (symbol == NULL) symbol = Symbol(); // Если символ равен NULL, то присвоим символу значения Symbol()
//--------------------------------------------------------------------
//--- Инициализация переменных ---------------------------------------
int static result = 0;
int static result_old = 0;
int result_new = 0;
int count = 0;             // Расчет
int total = OrdersTotal(); // Количество открытых и отложенных ордеров
//--------------------------------------------------------------------
//--- Цикл подсчета открытых ордеров... ------------------------------
for (int index = 0; index < total; index++)                          // перебираем значение index пока оно меньше количества открытых и отложеных позиций
   {
   if (OrderSelect(index, SELECT_BY_POS, MODE_TRADES)==false) break; // выберим открытую позицию...
   if (OrderSymbol() == symbol)                                      // проверим символ ордера...
      {
      if (OrderMagicNumber() == magic || magic == NULL)              // проверим идентификатор ордера..
         {
         if (OrderType() == cmd || cmd == -1) count++;               // проверим тип (торговую операцию) позиции и увеличим значение count на 1
         }
      }
   }
//--------------------------------------------------------------------
result_new = count;
//--------------------------------------------------------------------
if (result_new != result_old)
   {
   result = result_new;
   result_old = result_new;
   //PrintFormat("CountOpenOrders( %s, %s , %s ) - Количество открытых позиций: %s ",symbol,EnumToString(cmd),IntegerToString(magic),IntegerToString(result));
   }
return (result);                                                      // вернем полученое значение result
}
//+------------------------------------------------------------------+

Перед условием на открытия вставляете строчку

if (CountOpenOrders(symbol,OP_BUY,magic) < 1)
   {
   if (Signal(symbol) > 0) //условия для открытия ордера на БАЙ
      {...}