[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 814

 
Aprire[1] Chiudere[1]
 

Saldo 600-1199 lotto 0,1

Saldo 1200-1799 lotto 0,2

Saldo 1800-2399 lotto 0,3 ecc.

Come organizzarsi nell'EA? Grazie.

 
Maniac:

Saldo 600-1199 lotto 0,1

Saldo 1200-1799 lotto 0,2

Saldo 1800-2399 lotto 0,3 ecc.

Come organizzarsi nell'EA? Grazie.

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:

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

Allo stesso tempo, l'equilibrio può essere nelle nuvole, e l'equity può essere in un grande drawdown. Pertanto, la dimensione del lotto può sembrare più grande di quanto possa essere aperta e l'intera struttura andrà in eccesso...

Prima di aprire è meglio correggere il lotto per il reale possibile.

Ho creato una funzione per questo scopo. È stato leggermente corretto da Viktor(Vinin) - provalo:

// ===========================================================================
// --- Функция рассчёта величины лота для открытия позиции. Редакция 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);                            
}

Nella linea.

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

... Il margine libero è diviso per quattro e solo un quarto dei fondi liberi è considerato idoneo al trading.

Puoi togliere la divisione per 4 e mettere quanto vuoi, anche usare tutto il margine.

Ma la funzione non vi permetterà di usare una dimensione del lotto più grande di quella consentita.

 
artmedia70:
Allo stesso tempo, l'equilibrio può essere nelle nuvole, mentre l'equità è nel grande drawdown. Rispettivamente, la dimensione del lotto può sembrare più grande di quanto possa essere aperta e l'intera struttura andrà in eccesso...


Perché è tutto così triste...

l'ultimo return() nella mia funzione darà il lotto minimo disponibile per lo strumento. Se il conto è un centesimo con una grande leva, allora quando il saldo è inferiore a 600, l'Expert Advisor può scambiare un po' più di tempo :)

SZZY: il problema è specifico e il ramo è quello di dare una direzione all'interrogante.

 
IgorM:


perché è così triste...

l'ultimo return() nella mia funzione darà il lotto minimo disponibile per lo strumento. Se il conto è un centesimo con una grande leva, allora quando il saldo è inferiore a 600, l'Expert Advisor può scambiare un po' più di tempo :)

SZZY: Il problema è specifico, e il ramo per dare direzione all'interrogante

Beh, perdonami generosamente... :) Non si arrabbi, signore... :)

Ecco una funzione nella mia versione:

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

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:


Perché è così triste...

l'ultimo return() nella mia funzione darà il lotto minimo disponibile per lo strumento. Se il conto è un centesimo con una grande leva, allora quando il saldo è inferiore a 600, l'Expert Advisor può scambiare un po' più di tempo :)

SZZY: il problema è specifico, e il ramo per dare direzione all'interrogante

Vedi, Igor, quell'uomo ti ha fatto una domanda, tu gli hai dato la risposta giusta, e puoi in un certo senso dimenticartene. Ma ballare sull'equilibrio non va bene. Proprio per il fatto che l'equilibrio può essere in cielo, e la situazione reale - è il momento di salvare. Ed eccoci qui, hr-r-r-r-rating... ...e un grosso lotto in cima all'ordine... e lui è a terra... Anche l'equità, anche se è già
già lì... Quindi ti ho detto che sarebbe stato meglio fare affidamento sull'equità piuttosto che sull'equilibrio... :)

 

Buona giornata!

Potete per favore consigliare un principiante, è possibile scrivereun indicatore personalizzato in MQL4 , in modo che possa gestire contemporaneamente tutte le coppie di valute? Per quanto ho capito, il numero massimo di linee in un grafico indicatore è 8, ma ho bisogno di una sola linea. Cioè posso ottenere un array di array o variabili per tutte le coppie di valute contemporaneamente per questa linea?

Grazie in anticipo per la risposta.

 
Igor_Sev:

Cioè posso ottenere un array per questa linea elaborato da array o variabili su tutte le coppie di valute allo stesso tempo?


Teoricamente, non vedo alcun ostacolo. Un'altra domanda è se si può elaborare specificamente questo array.
 
Roger:

Teoricamente, non vedo alcun ostacolo. Un'altra domanda è se sarete in grado di elaborare questo array.


Come posso indirizzare tutte le coppie di valute nel codice del programma quando scrivo uno strumento? Ho guardato tra gli esempi di scrittura di uno strumento, non c'è alcun riferimento a una coppia di valute, quella che è legata a un grafico di quotazione specifico viene elaborata di default.

Il fatto è che ora Excel e VBA fanno tutto, ottengo informazioni su 22 coppie di valute attraverso il server DDE e usando il codice VBA intendo l'elaborazione simultanea, ma non è conveniente, perché in primo luogo devo aspettare 2 ore per l'accumulo della storia dei dati per eseguire l'analisi con i grafici di Excel. E non è conveniente saltare da un programma all'altro, ecco perché penso a come trasferire tutto su MT4.

Motivazione: