Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1917

 
Andrey Sokolov #:

Вы действительно сами этого не видите?

"Как расписать этот момент?"  - там где указан лот 0,01 надо высчитать минимальный имеющийся.

Это я вижу. Если сделать 0.02 то будет выбирать ордера с лотом 0.02. Я и спрашиваю как сделать чтобы смотрел сначала на 0.01, затем на 0.02 и так далее 

 
Sergey Gridnev #:
2 цикла надо: в первом узнаёте минимальный объем, во втором - закрываете. И учтите, что при закрытии ордера смещаются на 1 позицию, поэтому надо делать цикл от максимальной позиции к 0.

А как сделать от максимальной  к 0 ? 

 
Rustam Bikbulatov #:

Я и спрашиваю как сделать чтобы смотрел сначала на 0.01, затем на 0.02 и так далее 

Вам уже 2 раза ответили как.

 
Rustam Bikbulatov #:

Это я вижу. Если сделать 0.02 то будет выбирать ордера с лотом 0.02. Я и спрашиваю как сделать чтобы смотрел сначала на 0.01, затем на 0.02 и так далее 

Соберите в двумерный массив, в первом измерении лоты, во втором тикеты. Отсортируйте массив, и закрывайте пока в первом измерении минимальный лот. Или если надо закрыть все, но по мере возрастания лота, закрывайте до конца…

 
Sergey Gridnev #:
2 цикла надо: в первом узнаёте минимальный объем, во втором - закрываете. И учтите, что при закрытии ордера смещаются на 1 позицию, поэтому надо делать цикл от максимальной позиции к 0.

нет. От самой ранней к самой поздней.

 

То что сказали я это и сам знал. Ладно, буду методом тыка осваивать как всегда

 
Rustam Bikbulatov #:

То что сказали я это и сам знал. Ладно, буду методом тыка осваивать как всегда

//+------------------------------------------------------------------+
//|                                                       Око_01.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <GrosBuch.mqh>
#property script_show_inputs

//input double Max_loss=0; //
extern int N=6;           // Количество ордеров
input int SLpips=0;      // Количество пунктов
//Вычисляем возможное оставшееся количество лотов при N лоссов от оставшихся свободных средств
// Buch bi;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double PipValue = MarketInfo(NULL, MODE_TICKVALUE),
          min_lot = MarketInfo(NULL, MODE_MINLOT),
          lot_step = MarketInfo(NULL, MODE_LOTSTEP),
          Margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED),
          Max_loss=N*SLpips*PipValue*min_lot,                 //Вычисляем сумму совокупного возможного лосса
          M_m=DBL_MIN;
   double remains= AccountFreeMargin()-Max_loss;  //Значение свободных средств для открыти ордера Margin*Lots;
   while(remains>Margin*min_lot&&!IsStopped())   //если они больше,чем необходимо для открытия 1 лота
     {
      min_lot=NormalizeDouble(min_lot+lot_step,2);  //добавим минлот
      M_m=Margin*min_lot;                           //получим значени св средств при вычисленном лоте и размере стопа
      // Lots*=min_lot;
      Print("remains = ",remains," Margin =",Margin," PipValue =",PipValue," N =",N,"min_lot =",min_lot," Max_loss =",Max_loss," M-m =",M_m);
     }
  }
//+------------------------------------------------------------------+
 

Добрый вечер, уважаемые эксперты!

Помогите разобраться с одним моментом. Пишу начало функции и решил проверить часть её кода скриптом:

//+------------------------------------------------------------------+
//|                                                            3.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"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   /* Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {};
   MqlTradeResult result= {0};
   /* запустим цикл для перебора всех установленных отложенных ордеров */
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      /* определим параметры установленного ордера */
      string symbol=OrderGetString(ORDER_SYMBOL);                        // символ ордера
      int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);        // количество знаков после запятой
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);                // значение одного пункта
      ulong  ticket=OrderGetTicket(i);                                   // тикет ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      double volume=OrderGetDouble(ORDER_VOLUME_INITIAL);                // объём ордера
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double price_current=OrderGetDouble(ORDER_PRICE_CURRENT);          // текущая цена по символу ордера
      double price_order_open=OrderGetDouble(ORDER_PRICE_OPEN);          // цена открытия указанная в ордере
      double sl=OrderGetDouble(ORDER_SL);                                // стоп лосс ордера
      double tp=OrderGetDouble(ORDER_TP);                                // тейк профит ордера
      /* выведем информацию об установленных отложенных ордерах */
      PrintFormat("#%I64u %s  %s  %.2f price_current: %.5f price_order_open: %.5f sl: %.5f tp: %.5f magic: %d",
                  ticket,symbol,EnumToString(type),volume,price_current,price_order_open,sl,tp,magic);
     }
  }
//+------------------------------------------------------------------+


Но вот результат выведенный на печать во вкладе Эксперты немного озадачил. У отложенного ордера ORDER_TYPE_BUY_STOP символ отражён, а у ордера ORDER_TYPE_SELL_STOP почему-то нет.

С чем это может быть связано? С уважением, Владимир.



 
MrBrooklin #:

Добрый вечер, уважаемые эксперты!

Помогите разобраться с одним моментом. Пишу начало функции и решил проверить часть её кода скриптом:


Но вот результат выведенный на печать во вкладе Эксперты немного озадачил. У отложенного ордера ORDER_TYPE_BUY_STOP символ отражён, а у ордера ORDER_TYPE_SELL_STOP почему-то нет.

С чем это может быть связано? С уважением, Владимир.



Это связано с тем, что Вы не выбрали тикет, а пытаетесь получить его характеристики.
 
Sergey Gridnev #:
Это связано с тем, что Вы не выбрали тикет, а пытаетесь получить его характеристики.

Спасибо, Сергей, за отклик! Ваш ответ ещё больше меня озадачил. Как же так? При запуске скрипта происходит опрос всех установленных отложенных ордеров. Из картинки видно, что на графике их два и, при этом, один тикет получился выбранным, а другой нет? Не совсем понятно.

Можете пояснить чуть подробнее?

Задаю вопрос не из праздного любопытства, а в целях продолжения самообучения.

С уважением, Владимир.

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