Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода) - страница 18

 
PapaYozh:
Нет.
Результат не гарантирован.

если грошей хватит - то гарантировано 

 
fxsaber:

Нужно на MT5 написать скрипт, который на пустом счете открывает 100 позиций.


На MT4 решил таким образом.


У кого какие варианты решения на MT5?

Частичное исполнение возможно?
 
SanAlex:

если грошей хватит - то гарантировано 

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

 
Alexey Viktorov:
Частичное исполнение возможно?

Будем считать, что частичного исполнения нет. Однако, во время работы скрипта кто-то может случайно нажать на крестик в таблице позиций, закрыв одну/несколько из них. Однако, в конце выполнения скрипта все же должно быть ровно 100 позиций.


MT4-вариант безумно прост. Поэтому и написал в этой теме.

 
fxsaber:

У кого какие варианты решения на MT5?

Без синхронизатора - никак.

Может быть элементарно реквот или потеря связи в процессе, 100 ордерсендов далеко не всегда дадут 100 сделок.

 
Andrey Khatimlianskii:

Без синхронизатора - никак.

Может быть элементарно реквот или потеря связи в процессе, 100 ордерсендов далеко не всегда дадут 100 сделок.

Синхронизатор только будет гарантировать, что PositionsTotal и OrdersTotal значения не врут. Именно из-за того, что они краковременно врут, и получаются задвоения.

В принципе, синхронизатор - это одна строка. И если не лезть в его устройство, то применение простое.


Однако, даже с синхронизатором все крайне не тривиально. Можно использовать такое условие:

while (OrdersTotal() + PositionsTotal < 100)

Однако, с этим условием будет полный облом, если кто-то сделает следующее.

fxsaber:

Будем считать, что частичного исполнения нет. Однако, во время работы скрипта кто-то может случайно нажать на крестик в таблице позиций, закрыв одну/несколько из них. Однако, в конце выполнения скрипта все же должно быть ровно 100 позиций.


Т.е. элементарная задача, что решается в две строки в MT4, легко не решится в MT5. Поэтому MT4-style+Синхронизатор и рулит в MT5. Из-за этого не совсем понимаю, как иначе в MT5 пишутся советники, коих так много в том же Маркете.

 
fxsaber:

Синхронизатор только будет гарантировать, что PositionsTotal и OrdersTotal значения не врут. Именно из-за того, что они краковременно врут, и получаются задвоения.

В принципе, синхронизатор - это одна строка. И если не лезть в его устройство, то применение простое.


Однако, даже с синхронизатором все крайне не тривиально. Можно использовать такое условие:

Однако, с этим условием будет полный облом, если кто-то сделает следующее.


Т.е. элементарная задача, что решается в две строки в MT4, легко не решится в MT5. Поэтому MT4-style+Синхронизатор и рулит в MT5. Из-за этого не совсем понимаю, как иначе в MT5 пишутся советники, коих так много в том же Маркете.

В МТ5 все решается так же, как и в МТ4 и часто гораздо проще, ибо язык и АПИ гораздо богаче. Точнее, языки почти одинаковы, тут Метаквоты сделали огромную работу для совместимости, а вот АПИ довольно разные. Ренат (директор Метаквотес) в свое время заявлял на форумах, что МТ4 мертвый и его развивать не будут. Но видно, коммерческие интересы оказались важнее, и все же обновления выходят. Но в основном это исправления ошибок и новые фичи из МКЛ 5. Так что разработчики молодцы, снимаю шляпу, которой у меня нет.))

А в целом мне непонятны стоны некоторых товарищей, как сложно перейти на МКЛ5. Да нет там никаких сложностей, ну другое АПИ, так есть подробные исходники, я предпочитаю изучать по ним. У кого не хватает пока знаний, добро пожаловать в хелп, написано кратко, но четко. В любом случае пятерка быстрее четверки минимум в 10 раз, а в режиме оптимизации вообще использует все разрешенные вами ядра проца и при современной видеокарте бьет четверку в сотни раз. Так что не надо писать грустных песен. ))

 
Andrei Trukhanovich:

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

и так тоже не правильно? - хотя я не пойму, кто что хочет от этой функции - но она выполняет свою задачу на все 100!!!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

Будем считать, что частичного исполнения нет. Однако, во время работы скрипта кто-то может случайно нажать на крестик в таблице позиций, закрыв одну/несколько из них. Однако, в конце выполнения скрипта все же должно быть ровно 100 позиций.


MT4-вариант безумно прост. Поэтому и написал в этой теме.

То-есть для MQL5 вы ставите такие условия, что кто-то может пошалить, а для MQL4 нет? А если я подключусь к счёту с другого компа и поставлю пару отложек… что откроет MQL4???

Вы хотите без каких либо проверок начудить? Вы агитируете за вседозволенность в программировании, или просто пытаетесь побольше охаять MQL5 в чьих-то корыстных интересах?

Напишите всё то-же самое на mql4 с проверками и защитой от дурака.

 
Alexey Viktorov:

То-есть для MQL5 вы ставите такие условия, что кто-то может пошалить, а для MQL4 нет? А если я подключусь к счёту с другого компа и поставлю пару отложек… что откроет MQL4???

Условия MT4 и MT5 одинаковые.

Вы хотите без каких либо проверок начудить? Вы агитируете за вседозволенность в программировании, или просто пытаетесь побольше охаять MQL5 в чьих-то корыстных интересах?

Напишите всё то-же самое на mql4 с проверками и защитой от дурака.

Все делаю только на MT5. Просто не стоит нести чушь, что MT5 не сложнее MT4. Он ГОРАЗДО сложнее! Только на этой неделе появилось решение задвоения позиций, и то не факт, что рабочее на 100%.

Столько лет все знали о задвоении, приходя к... Sleep. Потому что ОЧЕНЬ сложно. О многих особенностях торгового API, что поднимались на форуме, разработчики не в курсе, либо не давали своих комментариев.


Никто не хает MT5. Показал примерами некоторые проблемы при решении элементарных задач.

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