Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1415

 
  1. A maioria das corretoras não emite mais chamadas de margem, pois todas as posições são fechadas (automaticamente?) antes que uma conta caia no vermelho (e você tenha que adicionar dinheiro: a chamada de margem).
  2. Margem é o valor considerado como um depósito para uma posição aberta, ACCOUNT_MARGIN_FREE é o restante (parte não utilizada).
  3. Um máximo de 5% a 10% do saldo da conta (saldo) ou do saldo de capital (saldo da conta + posições abertas, patrimônio líquido) deve ser usado para negociação a fim de evitar que as posições sejam fechadas devido à falta de capital e às perdas nas posições.
  4. O risco de uma posição depende do SL e do tamanho do lote. Como o SL geralmente é fixo por motivos técnicos, o tamanho do lote é usado para calcular o risco:
    Pesquise "calculate lotsize": https://www.mql5.com/en/search#!keyword=calculate%20lotsize&module=mql5_module_forum
  5. Dica: a maioria dos artigos também está disponível em alemão, basta substituir o /en/ no URL por /de/: https://www.mql5.com/de/articles/2555
[Excluído]  
Obrigado pelas informações. Nas verificações que um robô de negociação deve passar, é mencionado um método "CheckMoneyForTrade", que verifica se a margem a ser usada para a negociação é maior do que a margem livre (ACCOUNT_FREE_MARGIN). Se eu entendi corretamente, você também deve verificar se os fundos usados também excedem uma determinada porcentagem do saldo da conta, ou seja, algo como:
 if (freeMargin - tradeMargin < balance * 0.9) return false;

Assim, é claro que você pode alterar 0,9 para (1 - maxRisk) e implementar uma propriedade "Maximum Risk in %" que pode ser definida pelo usuário.

P.S. Você usa o primeiro nome ou o sobrenome aqui no fórum?
 
Benjamin Fotteler #:
Obrigado pelas informações. Nas verificações que um robô de negociação deve passar, é mencionado um método "CheckMoneyForTrade", que verifica se a margem a ser usada para a negociação é maior do que a margem livre (ACCOUNT_FREE_MARGIN). Se eu entendi corretamente, você também deve verificar se os fundos usados também excedem uma determinada porcentagem do saldo da conta, ou seja, algo do tipo:

Assim, é claro que você pode alterar 0,9 para (1 - maxRisk) e implementar uma propriedade "Risco máximo em %" que pode ser definida pelo usuário.

P.S. Estamos nos tratando pelo primeiro nome ou pelo primeiro nome aqui no fórum?

Todo mundo se atrapalha com o tamanho do lote e há muito código e comentários aqui!

Agora eu entendi o que William Roeder escreveu para o MT5, que seria a função não testada(!!):
(https://www.mql5.com/en/forum/133792/page3#comment_3405179 & https://www.mql5.com/en/forum/390088#comment_28092477)

double lotsz (double risk, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   MqlTick mqTick;
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   SymbolInfoTick(sym,mqTick); 
   double diff = (ordDir==ORDER_TYPE_BUY) ? mqTick.ask - sl : ( (ordDir==ORDER_TYPE_SELL) ? sl - mqTick.bid : -1.0 );
   if (diff<0.0) return(0.0);
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   return( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
}
// use: lotsz(5, sl)

Por favor, avise-me se encontrar algum erro!

Como a maioria das pessoas aqui é, de alguma forma, anônima com seus apelidos ou nomes próprios, e isso costumava ser ainda mais frequente, o "Du" se tornou naturalizado.

Why is there NO Complete EA within the Code-Base? - When does the market close or open?
Why is there NO Complete EA within the Code-Base? - When does the market close or open?
  • 2011.08.20
  • www.mql5.com
I wanted to close all orders before end of the week (market close friday,) to prevent loss should the market gap over the week end, by passing the sl. ) so the question is when does the market close (or open. For example info on opened charts and history data, time info (like gmt, timezone, dst), market open, close info
[Excluído]  

Obrigado pelo código. A única coisa que faltou foi a adaptação a um tamanho de lote intermediário válido:

double lotsz (double risk, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   MqlTick mqTick;
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   SymbolInfoTick(sym,mqTick); 
   double diff = (ordDir==ORDER_TYPE_BUY) ? mqTick.ask - sl : ( (ordDir==ORDER_TYPE_SELL) ? sl - mqTick.bid : -1.0 );
   if (diff<0.0) return(0.0);
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   lts = ( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return ((int)MathRound(lts/stepSize)*stepSize);
}
// use: lotsz(5, sl)

Tenho outra pergunta: se eu calcular a perda de uma negociação interrompida com TICK_VALUE ou com deltaValue como acima, o resultado será sempre ligeiramente diferente do cálculo interno da MQL5:

double price=(ordDir==ORDER_TYPE_BUY) ? mqTick.ask : ((ordDir==ORDER_TYPE_SELL) ? mqTick.bid : mqTick.last);
double loss;
OrderCalcProfit(ordDir, sym, 1, price, sl, loss)

Isso ocorre porque a perda/ganho por tick é diferente para uma conta em EUR e para o preço de mercado 1.0 e o preço de mercado 1.2? Porque se eu digitar, por exemplo, "price + 0.1" em vez de price e "sl + 0.1" em vez de sl no código abaixo, a distância do tick (diff) será a mesma, mas os respectivos resultados gerados pelo OrderCalcProfit serão diferentes. E quando observo os lucros/perdas que obtenho nas negociações manuais, isso parece se confirmar.

Se eu estiver certo, então o código a seguir seria mais preciso:

double lotsz (double risk, double entry, double sl, ENUM_ORDER_TYPE ordDir, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   double loss;
   OrderCalcProfit(ordDir, sym, 1, entry, sl, loss);
   double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / -loss);
   lts = (fmin(fmax(SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN), lts), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return ((int)MathRound(lts / stepSize) * stepSize);
}
// use: lotsz(5, ask, sl)
P.S. Mais uma vez, obrigado pela ideia básica: vincular o fator de risco não ao saldo, mas à margem livre, claramente faz sentido.
 

O código a seguir foi criado de acordo com o próprio expert sar parabólico do mql 5. Posso inverter a operação do sinal de compra e do sinal de venda aqui? Ou seja, quando o sinal de compra vier, quero que ele abra vendas em vez de comprar. Alguém pode ajudar?




#property copyright "Copyright 2022, MetaQuotes Ltd."

#property link"https://www.mql5.com"

#property version "1.00"

//+------------------------------------------------------------------+

//| Incluir |

//+------------------------------------------------------------------+

#include <Expert\Expert.mqh>

//--- sinais disponíveis

#include <Expert\Signal\SignalSAR.mqh>

//--- trilhas disponíveis

#include <Expert\Trailing\TrailingNone.mqh>

//--- gerenciamento de dinheiro disponível

#include <Expert\Money\Money\MoneyFixedLot.mqh>

//+------------------------------------------------------------------+

//| Entradas

//+------------------------------------------------------------------+

//--- entradas para especialista

input string Expert_Title ="sar"; // Nome do documento

ulong Expert_MagicNumber =13831; //

bool Expert_EveryTick =false; //

//--- entradas para o sinal principal

input int Signal_ThresholdOpen =10; //Valor do limiar do sinal para abrir [0...100]

input int Signal_ThresholdClose=10; // Valor do limite do sinal para fechar [0...100]

input double Signal_PriceLevel =0,0; // Nível de preço para executar uma negociação

input int Signal_Expiration =4; //Vencimento das ordens pendentes (em barras)

input double Signal_SAR_Step =0.02; // Incremento de velocidade SAR parabólico (0.02,0.2)

input double Signal_SAR_Maximum =0.2; // Parabolic SAR(0.02,0.2) Taxa máxima

input double Signal_SAR_Weight =1.0; // Parabolic SAR(0.02,0.2) Peso [0....1.0]

//--- entradas para dinheiro

input double Money_FixLot_Percent =10.0; //Porcentagem

input double Money_FixLot_Lots =0.1; // Volume fixo

//+------------------------------------------------------------------+

//| Objeto especialista global

//+------------------------------------------------------------------+

CExpert ExtExpert;

//+------------------------------------------------------------------+

//| Função de inicialização do especialista |

//+------------------------------------------------------------------+

int OnInit()

{

//--- Inicialização do especialista

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))

{

//----- falhou

printf(__FUNCTION__+": erro ao inicializar o especialista");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Criando sinal

CExpertSignal *signal=new CExpertSignal;

if(signal==NULL)

{

//----- falhou

printf(__FUNCTION__+": erro ao criar o sinal");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//---

ExtExpert.InitSignal(signal);

signal.ThresholdOpen(Signal_ThresholdOpen);

signal.ThresholdClose(Signal_ThresholdClose);

signal.PriceLevel(Signal_PriceLevel);

signal.Expiration(Signal_Expiration);

//--- Criando o filtro CSignalSAR

CSignalSAR *filter0=novo CSignalSAR;

if(filter0==NULL)

{

//----- falhou

printf(__FUNCTION__+": erro ao criar filter0");

ExtExpert.Deinit();

return(INIT_FAILED);

}

signal.AddFilter(filter0);

//--- Definir os parâmetros do filtro

filter0.Step(Signal_SAR_Step);

filter0.Maximum(Signal_SAR_Maximum);

filter0.Weight(Signal_SAR_Weight);

//--- Criação do objeto de rastreamento

CTrailingNone *trailing=new CTrailingNone;

if(trailing==NULL)

{

//----- falhou

printf(__FUNCTION__+": erro ao criar o trailing");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Adicionar trailing ao expert (será excluído automaticamente))

if(!ExtExpert.InitTrailing(trailing))

{

//----- falhou

printf(__FUNCTION__+": erro ao inicializar o trailing");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Definir parâmetros de trailing

//--- Criação do objeto dinheiro

CMoneyFixedLot *money=new CMoneyFixedLot;

if(money==NULL)

{

//----- falhou

printf(__FUNCTION__+": erro ao criar dinheiro");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Adicionar dinheiro ao especialista (será excluído automaticamente))

if(!ExtExpert.InitMoney(money))

{

//----- falhou

printf(__FUNCTION__+": erro ao inicializar o dinheiro");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Definir parâmetros de dinheiro

dinheiro.Porcentagem(Money_FixLot_Percent);

money.Lots(Money_FixLot_Lots);

//--- Verificar os parâmetros de todos os objetos de negociação

if(!ExtExpert.ValidationSettings())

{

//----- falhou

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- Ajuste de todos os indicadores necessários

if(!ExtExpert.InitIndicators())

{

//----- falhou

printf(__FUNCTION__+": erro ao inicializar os indicadores");

ExtExpert.Deinit();

return(INIT_FAILED);

}

//--- ok

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Função de desinicialização do expert

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

ExtExpert.Deinit();

}

//+------------------------------------------------------------------+

//| Função do manipulador de eventos "Tick".

//+------------------------------------------------------------------+

void OnTick()

{

ExtExpert.OnTick();

}

//+------------------------------------------------------------------+

//| Função do manipulador de eventos "Trade"

//+------------------------------------------------------------------+

void OnTrade()

{

ExtExpert.OnTrade();

}

//+------------------------------------------------------------------+

//| Função do manipulador de eventos "Timer"

//+------------------------------------------------------------------+

void OnTimer()

{

ExtExpert.OnTimer();

}

//+------------------------------------------------------------------+


 
Sugestão interessante, vou dar uma olhada nela. A função OrderCalcProfit() só existe no MT5 e as ideias para o cálculo de lotes remontam à época do MT4...
 
Não consigo abrir minha sessão no aplicativo para ver quanto dinheiro tenho
 

Agora, tive tempo de trabalhar com sua solução. Ela é mais precisa (enquanto a outra é mais cautelosa, já que a comissão é levada em conta?) e aparentemente menos propensa a erros, como pode ser visto com ouro e prata na conta demo da MQ - com a Roboforex ela é, como esperado, um pouco mais cautelosa do que sua solução:

MetaQuotes demo account (b. 3369 Beta channel)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   XAUUSD  in: 1717.65000 sl:1717.15000  diff:0.50000  delta:10.00000  delta:*diff:5.00000  tVal:0.10000  tSz:0.01000
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   XAGUSD  in: 18.45100 sl:18.40100  diff:0.05000  delta:500.00000  delta:*diff:25.00000  tVal:0.50000  tSz:0.00100
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   EURUSD  in: 1.02185 sl:1.02235  diff:0.00050  delta:97861.72139  delta:*diff:48.93086  tVal:0.97862  tSz:0.00001
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  XAUUSD  BU  in: 1717.65000  sl: 1717.15000  lotsC: 71.3100 (-3489.26)  lotsB: 10.2000 (-499.09)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  XAGUSD  BU  in: 18.45100  sl: 18.40100  lotsC: 18.4900 (-4523.66)  lotsB: 2.0400 (-499.09)
2022.07.25 17:43:42.645 test_MM-functions (EURUSD,M1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 9983.40 EUR:  EURUSD  SE  in: 1.02185  sl: 1.02235  lotsC: 9.8000 (-479.29)  lotsB: 10.2100 (-499.34)


RoboForex Demo account (b. 3320 release channel)
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   XAUUSD  in: 1717.10000 sl:1717.15000  diff:0.05000  delta:100.00000  delta:*diff:5.00000  tVal:0.10000  tSz:0.00100
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   XAGUSD  in: 18.43400 sl:18.43350  diff:0.00050  delta:5000.00000  delta:*diff:2.50000  tVal:0.05000  tSz:0.00001
2022.07.25 17:46:22.772 test_MM-functions (EURUSD,D1)   EURUSD  in: 1.02186 sl:1.02236  diff:0.00050  delta:100000.00000  delta:*diff:50.00000  tVal:1.00000  tSz:0.00001
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  XAUUSD  SE  in: 1717.10000  sl: 1717.15000  lotsC: 38.2000 (-191.00)  lotsB: 53.4900 (-267.45)
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  XAGUSD  BU  in: 18.43400  sl: 18.43350  lotsC: 59.4300 (-148.57)  lotsB: 106.9700 (-267.42)
2022.07.25 17:46:22.773 test_MM-functions (EURUSD,D1)   Set: Risk: 5.0 %, dSL: 50  Com/Lot: 2.00  Free: 5348.69 USD:  EURUSD  SE  in: 1.02186  sl: 1.02236  lotsC: 5.1400 (-257.00)  lotsB: 5.3500 (-267.50)

Na conta da MQ, os tamanhos dos lotes seriam muito altos.

Aqui está meu script para comparar os dois métodos:

//+------------------------------------------------------------------+
//|                                            test_MM-functions.mq5 |
//|                                                            Calli |
//|                              https://www.mql5.com/de/users/gooly |
//+------------------------------------------------------------------+
#property copyright "Calli"
#property link      "https://www.mql5.com/de/users/gooly"
#property version   "1.00"
#property script_show_inputs
//--- input parameters
input double   risk_perCent   = 5.0;   // risk of capital in % on free_margin
input double   diff_sl        = 50;    // diff sl in points from entry
input double   CommPerLot     = 2.00;  

string Com = "",Syms[] = {"XAUUSD", "XAGUSD", "EURUSD" }; //,"AUDUSD","GBPCHF","GBPUSD", "EURCAD", "USDCAD", "USDRUB", "GBPJPY", "USDJPY"};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#define  forEach(TYPE, VAR, ARRAY) \
                TYPE VAR=NULL; \
                for(int i##VAR=0;  i##VAR<ArraySize(ARRAY)&&((VAR=ARRAY[i##VAR])!=NULL||true);  i##VAR++)

void OnStart()
  {
//---
   MqlTick mqTick;
   forEach(string, sym, Syms){
      
      double pnt = SymbolInfoDouble(sym,SYMBOL_POINT);
      ENUM_ORDER_TYPE ord = GetMicrosecondCount()%2==0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL; // randomly buy or sell
      SymbolInfoTick(sym,mqTick); 
      double entry = (ord==ORDER_TYPE_BUY) ? mqTick.ask : mqTick.bid,
             sl    = (ord==ORDER_TYPE_BUY) ? entry - diff_sl*pnt : entry + diff_sl*pnt,
             lossC = 0.0, lossB = 0.0,
             lotsC = lotszC(risk_perCent, entry, sl, sym, CommPerLot), 
             lotsB = lotszB(risk_perCent, entry, sl, sym, CommPerLot);
      
      if (!OrderCalcProfit(ord, sym, lotsC, entry, sl, lossC) ) 
         Print("chk OrderCalcProfit(",EnumToString(ord),", ",sym,", lot: ",lotsC,", in: ",DoubleToString(entry,6),", out: ",DoubleToString(sl,6),", lossC) => err: ",_LastError," lossC: ",lossC);
             
      if (!OrderCalcProfit(ord, sym, lotsB, entry, sl, lossB) ) 
         Print("chk OrderCalcProfit(",EnumToString(ord),", ",sym,", lot: ",lotsC,", in: ",DoubleToString(entry,6),", out: ",DoubleToString(sl,6),", lossC) => err: ",_LastError," lossC: ",lossC);
             
      string res = StringFormat("Set: Risk: %.1f %%, dSL: %.0f  Com/Lot: %.2f  Free: %.2f %s:  %s  %s  in: %.5f  sl: %.5f  lotsC: %.4f (%+.2f)  lotsB: %.4f (%+.2f)",
                                 risk_perCent, diff_sl, CommPerLot,
                                 AccountInfoDouble(ACCOUNT_MARGIN_FREE),AccountInfoString(ACCOUNT_CURRENCY),
                                 sym, (ord==ORDER_TYPE_BUY ? "BU" : "SE"), entry, sl, lotsC, lossC, lotsB, lossB );
      Com = Com + res+"\n";
   }
   Comment(Com);
   //Print(Com);
  }
//+------------------------------------------------------------------+
double lotszC (double risk, double entry, double sl, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   double deltaValue = SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE) / SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE);
   ENUM_ORDER_TYPE ordDir = entry > sl ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   double diff = fabs (entry - sl); 
   Print(sym,"  in: ",DoubleToString(entry,5)," sl:",DoubleToString(sl,5),"  diff:",DoubleToString(diff,5),
         "  delta:",DoubleToString(deltaValue,5),"  delta:*diff:",DoubleToString(deltaValue*diff,5),
         "  tVal:",DoubleToString(SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE),5),"  tSz:",
         DoubleToString(SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE),5));
   double lts = ( (AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk/100) / (diff * deltaValue + CommissionPerLot) );
   lts = ( fmin(fmax(SymbolInfoDouble(sym,SYMBOL_VOLUME_MIN),lts),SymbolInfoDouble(sym,SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return (MathRound(lts/stepSize)*stepSize);
}

double lotszB (double risk, double entry, double sl, string sym="", double CommissionPerLot=0) {
   if (sym == "") sym = _Symbol;
   ENUM_ORDER_TYPE ordDir = entry > sl ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   double loss;
   if (!OrderCalcProfit(ordDir, sym, 1, entry, sl, loss)) return(-1.0);
   double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / -loss);
   lts = (fmin(fmax(SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN), lts), SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX)));
   double stepSize = SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP);
   return (MathRound(lts / stepSize) * stepSize);
}

Derivei a direção de in > sl (compra) ou in < sl (venda). Assim, não haveria problemas com as ordens pendentes

[Excluído]  

Obrigado por seus testes. Sim, se você comparar os resultados entre si, poderá ver, por um lado, a consistência do OrderCalcProfit e, por outro lado, pelo menos para EURUSD e RoboForex, que os resultados diferem em aproximadamente "Lot size * CommissionPerLot". Isso poderia ser adicionado:

if (!OrderCalcProfit(ordDir, sym, 1, entry, sl, loss)) return(-1.0);
double lts = ((AccountInfoDouble(ACCOUNT_MARGIN_FREE) * risk * 0.01) / (-loss + CommissionPerLot);
Se eu usei a pesquisa do fórum corretamente, não há como consultar o valor "CommissionPerLot" diretamente usando MQL5, há?
 
Benjamin Fotteler #:


Se eu usei a pesquisa do fórum corretamente, então não há como consultar o valor "CommissionPerLot" diretamente usando MQL5, há?

Sim, não diretamente no terminal, mas solicite-o ao corretor ou no histórico de negociação: DEAL_COMMISSION.

Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Handelskonstanten / Eigenschaften der Deals
  • www.mql5.com
Eigenschaften der Deals - Handelskonstanten - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5