新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1918

 
Andrey Sokolov #:

你自己真的看不出来吗?

"我如何写下这个?" - 在写有0.01手的地方,你必须计算出最小的可用量。

我可以看到。如果你设置为0.02,那么0.02手的订单就会被选中。 我问如何设置为先看0.01手,再看0.02手,以此类推。

 
Sergey Gridnev #:
你需要2个周期:你在第一个周期中找出最小量,并在第二个周期中关闭它。请注意,当你平仓时,订单会被转移1个位置,所以你必须从最大位置到0进行循环。

你如何从最大值到0?

 
Rustam Bikbulatov #:

我问的是如何让它先看0.01,再看0.02,以此类推。

已经两次告诉你如何做了。

 
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 #:
这与你没有选择一张票,但试图获得其特征的事实有关。

谢谢你,谢尔盖,谢谢你的答复你的回答让我更加疑惑。怎么可能呢?当我运行该脚本时,所有设定的挂单都被询问了。正如我们在图片中看到的,图表上有两个,同时,一个票被选中,另一个没有?这一点并不十分清楚。

你能更详细地解释一下吗?

我问这个问题不是出于空闲的好奇心,而是为了继续自我学习。

问候,弗拉基米尔。

原因: