[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 814

 
Abrir[1] Fechar[1]
 

Saldo 600-1199 lote 0,1

Saldo 1200-1799 lote 0,2

Saldo 1800-2399 lote 0,3 etc.

Como se organizar na EA? Obrigado.

 
Maniac:

Saldo 600-1199 lote 0,1

Saldo 1200-1799 lote 0,2

Saldo 1800-2399 lote 0,3 etc.

Como se organizar na EA? Obrigado.

double Lot()
{
   double balance=AccountBalance();
   if (balance>600 && balance<1199) return(0.1);
   if (balance>1200 && balance<1799) return(0.2);
   if (balance>1800 && balance<2399) return(0.3);
return(MarketInfo(Symbol(), MODE_MINLOT));
}
 

call: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "My order #",magic,0,CLR_NONE);
 
IgorM:

Chamada: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "Meu pedido #",magic,0,CLR_NONE);

Ao mesmo tempo, o saldo pode estar nas nuvens, e a equidade pode estar em um grande drawdown. Portanto, o tamanho do lote pode parecer maior do que pode ser aberto e toda a estrutura irá ao mar...

Antes de abrir, é melhor corrigir o lote para o real possível.

Eu fiz uma função para este fim. Foi ligeiramente corrigido por Viktor(Vinin) - experimente-o:

// ===========================================================================
// --- Функция рассчёта величины лота для открытия позиции. Редакция VininI---
// Если лот превышает возможный для открытия позы, то он корректируется 
// ===========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле
   
   
   double Money=lt*OneLot+mspr*pnt;          // Вычисляем стоимость открываемой позы
   if (Money>=TradeMrg)                      // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         lt=MathFloor(TradeMrg/OneLot/StpLot)*StpLot;  // ... рассчитаем допустимый лот
         Print("Func CorrectLots: полученный лот ",lt," скорректирован под допустимый ",lt); 
      }
      else 
         Print("Func CorrectLots: лот вернули без изменений");
   lt=MathMin(MaxLot, MathMax(MinLot, lt)); // Проверим превышение допустимых ...
   
   return(lt);                            
}

Na fila.

double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле

... A margem livre é dividida por quatro e apenas um quarto dos fundos livres são considerados elegíveis para negociação.

Você pode remover a divisão por 4 e colocar o quanto quiser, até mesmo usar toda a margem.

Mas a função não permitirá que você use um tamanho muito maior do que o permitido.

 
artmedia70:
Ao mesmo tempo, o saldo pode estar nas nuvens, enquanto o patrimônio líquido está no grande drawdown. Respectivamente, o tamanho do lote pode parecer maior do que pode ser aberto e toda a estrutura irá para o mar...


Por que tudo é tão triste...

o último retorno() em minha função dará o lote mínimo disponível para o instrumento. Se a conta for de um centavo com uma grande alavancagem, então quando o saldo for inferior a 600, o Expert Advisor poderá negociar um pouco mais de tempo :)

SZZY: o problema é específico e o ramo é dar direção ao questionador.

 
IgorM:


por que é tão triste...

o último retorno() em minha função dará o lote mínimo disponível para o instrumento. Se a conta for de um centavo com uma grande alavancagem, então quando o saldo for inferior a 600, o Expert Advisor poderá negociar um pouco mais de tempo :)

SZZY: O problema é específico, e o ramo para dar direção ao questionador

Bem, perdoe-me generosamente... :) Não se zangue, senhor... :)

Aqui está uma função em minha versão:

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);      // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);            // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);       // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                 // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                                       // Возврат изначального лота в непредусмотренных случаях с сообщением
}
 
IgorM:


Por que é tão triste...

o último retorno() em minha função dará o lote mínimo disponível para o instrumento. Se a conta for de um centavo com uma grande alavancagem, então quando o saldo for inferior a 600, o Expert Advisor poderá negociar um pouco mais de tempo :)

SZZY: o problema é específico, e o ramo para dar direção ao questionador

Veja, Igor, o homem lhe fez uma pergunta, você lhe deu a resposta certa, e você pode meio que esquecê-la. Mas dançar em cima da balança não é bom. Pela mesma razão que o equilíbrio pode estar no céu, e a situação real - é hora de economizar. E aqui estamos nós, hr-r-r-r-r-ing... ...e um grande lote em cima do pedido... e ele está em baixo... Equidade também, mesmo que já seja
já lá está... Então, eu lhe disse que seria melhor confiar na equidade do que no equilíbrio... :)

 

Bom dia!

Você pode aconselhar um novato, é possível escreverum indicador personalizado em MQL4 , para que ele possa lidar simultaneamente com todos os pares de moedas? Pelo que entendi, o número máximo de linhas em um gráfico indicador é 8, mas eu preciso apenas de uma linha. Isto é, posso obter um conjunto de matrizes ou variáveis para todos os pares de moedas simultaneamente para esta linha?

Agradecemos antecipadamente pela resposta.

 
Igor_Sev:

Isto é, posso obter uma matriz para esta linha processada a partir de matrizes ou variáveis em todos os pares de moedas ao mesmo tempo?


Teoricamente, não vejo nenhum obstáculo. Outra questão é se você pode processar especificamente esta matriz.
 
Roger:

Teoricamente, não vejo nenhum obstáculo. Outra questão é se você será capaz de processar esta matriz.


Como posso abordar todos os pares de moedas no código do programa ao escrever uma ferramenta? Eu olhei através dos exemplos de como escrever uma ferramenta, não há referência a um par de moedas, aquele que está ligado a um gráfico de cotação específico é processado por padrão.

O problema é que agora o Excel e o VBA fazem tudo isso, eu obtenho informações sobre 22 pares de moedas através do servidor DDE e usando código VBA quero dizer processamento simultâneo, mas não é conveniente, porque primeiro tenho que esperar 2 horas para que o histórico de dados se acumule para realizar análises por gráficos do Excel. E não é conveniente saltar de um programa para outro, é por isso que penso em como transferir tudo para o MT4.