Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1917

 
Sergey Gridnev #:
Você precisa de 2 ciclos: você descobre o volume mínimo no primeiro e fecha-o no segundo. E note que quando você fecha as ordens são deslocadas por 1 posição, então você tem que fazer o ciclo da posição máxima para 0.

Como se passa do máximo para 0 ?

 
Rustam Bikbulatov #:

Estou perguntando como fazer com que pareça primeiro 0,01, depois 0,02 e assim por diante.

Já lhe disseram como duas vezes.

 
Rustam Bikbulatov #:

Eu posso ver isso. Se você definir para 0,02, ele selecionará os pedidos com lote 0,02. Estou perguntando como definir para 0,01 primeiro, depois 0,02 e assim por diante.

Agregue a matriz em uma bidimensional, com lotes na primeira dimensão e bilhetes na segunda. Ordene a matriz e feche enquanto a primeira dimensão tem o menor lote. Ou se você precisar fechar tudo, mas conforme o lote aumenta, perto do fim...

 
Sergey Gridnev #:
Você precisa de 2 ciclos: você descobre o volume mínimo no primeiro e fecha-o no segundo. E note que quando você fecha as ordens são deslocadas por 1 posição, então você tem que fazer o ciclo da posição máxima para 0.

não. Desde o mais cedo até o mais tarde.

 

Eu sabia o que eles diziam. Bem, terei que aprender por tentativa e erro, como sempre.

 
Rustam Bikbulatov #:

Eu sabia o que eles diziam. Bem, terei que aprender por tentativa e erro, como sempre.

//+------------------------------------------------------------------+
//|                                                       Око_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);
     }
  }
//+------------------------------------------------------------------+
 

Boa noite, caros especialistas!

Por favor, ajude-me a entender uma coisa. Estou escrevendo o início de uma função e decidi verificar alguma parte de seu código com um roteiro:

//+------------------------------------------------------------------+
//|                                                            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);
     }
  }
//+------------------------------------------------------------------+


Mas o resultado é impresso na guia Especialistas é um pouco confuso. A ordem ORDER_TYPE_BUY_STOP tem o símbolo, mas a ORDER_TYPE_SELL_STOP não o tem por algum motivo.

Com o que ele pode ser conectado? Cumprimentos, Vladimir.



 
MrBrooklin #:

Boa noite, caros especialistas!

Por favor, ajude-me a entender uma coisa. Estou escrevendo o início de uma função e decidi verificar alguma parte de seu código com um roteiro:


Mas o resultado é impresso na guia Especialistas é um pouco confuso. A ordem ORDER_TYPE_BUY_STOP tem o símbolo, mas a ORDER_TYPE_SELL_STOP não o tem por algum motivo.

Com o que ele pode ser conectado? Cumprimentos, Vladimir.



Isto porque você não selecionou um bilhete, mas está tentando obter suas características.
 
Sergey Gridnev #:
Tem a ver com o fato de que você não selecionou um ingresso, mas está tentando obter suas características.

Obrigado, Sergey, por sua resposta! Sua resposta me deixou ainda mais intrigado. Como poderia ser? Quando eu executo o roteiro, todas as ordens pendentes são interrogadas. Como podemos ver na imagem, há dois deles na tabela, e ao mesmo tempo, um bilhete é selecionado e o outro não? Não é muito claro.

Você pode explicar isso com mais detalhes?

Faço esta pergunta não por curiosidade, mas para continuar o auto-aprendizagem.

Cumprimentos, Vladimir.

 
MrBrooklin #:

Obrigado, Sergey, por sua resposta! Sua resposta me deixou ainda mais intrigado. Como poderia ser? Quando eu executo o roteiro, todas as ordens pendentes são interrogadas. Como podemos ver na imagem, há dois deles na tabela, e ao mesmo tempo, um bilhete é selecionado e o outro não? Não é muito claro.

Você pode explicar isso com mais detalhes?

Faço esta pergunta não por curiosidade, mas para continuar o auto-aprendizagem.

Cumprimentos, Vladimir.

Aqui, você tem um loop onde muda o iterador i do índice máximo para 0. O que acontece dentro? Bem, eis o que acontece: o primeiro comando que você tenta obter o parâmetro ORDER_SYMBOL. Mas de qual ordem você está tentando obtê-lo, porque a ordem será selecionada três linhas abaixo!
Razão: