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

 
Multy:

Capisco.

A proposito, c'è un timer in MQL4 o solo in MQL5?

Probabilmente solo queste funzioni:

https://www.mql5.com/ru/search?utm_campaign=MQL4.community

https://www.mql5.com/ru/search?utm_campaign=MQL4.community
 
kwadrad:

Domanda per gli aksakal

Il tester ha improvvisamente smesso di funzionare, non grattando fuori nessun dato storico.

Cosa dovrei farci?

per vostra informazione: l'archivio delle citazioni è stato scaricato


Mi ha aiutato riavviare il terminale e cancellare prima le citazioni scaricate nella cartella: C:\Program Files\MetaTrader - Alpari\history\Alpari-Micro2

poi ha riscaricato l'archivio delle citazioni

 
Noterday:
Potete dirmi la funzione che calcola il massimo volume possibile di apertura degli ordini?
Lasciate che vi dia una canna... :)
La funzione qui sotto ha tutti i dati necessari per calcolare i parametri di cui avete bisogno. Sono così pigro che non riesco nemmeno a battere sui tasti...

Puoi trovare quello che ti serve e modificarlo da solo... Il codice stesso è così semplice e accessibile che nessuno avrà problemi a rifarlo...

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

double CorrectLots(double lt, double divider=4.0)        // lt = проверяемый лот, divider = на сколько разделить
{                                                        //                                 свободные средства
   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()/divider,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);                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Una domanda...

Perché avete bisogno di uno scambio come quello di Hitler alla fine della guerra... Reclutava ragazzi nella Gioventù Hitleriana, per così dire, la carne per un colpo di cartuccia Faust...

Non suona nessuna campana?????

IMHO, naturalmente...

 
artmedia70:
Lasciate che vi dia una canna... :)
La funzione qui sotto ha tutti i dati per calcolare i parametri necessari. Sono così pigro che non riesco nemmeno a battere sui tasti...

Puoi trovare quello che ti serve e modificarlo da solo... Il codice stesso è così semplice e accessibile che nessuno avrà problemi a rifarlo...

Una domanda...

Perché avete bisogno di uno scambio come quello di Hitler alla fine della guerra... Reclutava ragazzi nella Gioventù Hitleriana, per così dire, la carne per un colpo di cartuccia Faust...

Non suona nessuna campana?????

IMHO, naturalmente...


Grazie!

Non si apre con il volume massimo, basta calcolarlo in base alle dimensioni del deposito, per ulteriori operazioni matematiche =))

 
Noterday:

Grazie!

Non ho intenzione di aprire con il volume massimo, ho solo bisogno di calcolarlo in base alle dimensioni del Depo per ulteriori operazioni matematiche =))



per COMPRARE:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2)

Per VENDERE:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2);

lotto - la variabile che contiene il volume dell'ordine

il risultato del calcolo dovrebbe essere controllato per >0

https://www.mql5.com/ru/search

 
IgorM:


per COMPRARE:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2);

Per VENDERE:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2);

lotto - variabile con il volume dell'ordine

https://www.mql5.com/ru/search

... Beh, Igor, hai fretta... :)

Prima che avessi il tempo di mettere le dita sulla tastiera, avevi già risposto... :)

 
Grazie a tutti!
 

Ciao!

Puoi suggerire un codice o un ramo su come memorizzare gli incroci della linea dell'indicatore con il prezzo. l'ho visto da qualche parte, ma non riesco a trovarlo. L'ho visto da qualche parte ma non riesco a trovarlo.

Non so se mi interessa, ma sono più interessato a qualcosa del genere:

int start()

  { 

 double LineX = iCustom ("EURUSD", Period_H1, "Indicator",0,0);

 double lineY = iCustom ("EURUSD", Period_H1, "Indicator",1,0);

double priceA = Ask;

double priceB = Bid;

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;

// а так же еще определить, какое пересечение последнее, а какое предпоследние 

// intersectionX = последнее пересечение и на оборот
// intersectionY = предпоследние пересечение и на оборот

// то есть я понимаю логику, а  вот связать в коде не могу.
 
//произошло intersectionX,   то intersectionFirst = intersectionX; intersectionSecond = intersectionY;

// произошло intersectionY, то intersectionFirst = intersectionY; intersectionSecond = intersectionX;


 }
 
belck:

Ciao!

Puoi suggerire un codice o un ramo su come memorizzare gli incroci della linea dell'indicatore con il prezzo. l'ho visto da qualche parte, ma non riesco a trovarlo. L'ho visto da qualche parte ma non riesco a trovarlo.

Voglio sapere se la linea dell'indicatore ha attraversato il prezzo, ma sono più interessato a questo:


qualsiasi crossover è meglio considerato come una differenza tra il prezzo (Ask/Bid) e la linea dell'indicatore, cioè

se (Ask-iCustom ("EURUSD", Period_H1, "Indicatore",0,0) > 0) Comment("Prezzo sopra l'indicatore"); altrimenti Comment("Prezzo sotto l'indicatore");

Se si confronta la differenza di questi valori, non è necessario normalizzarli per un confronto corretto

in particolare alla tua domanda - un attraversamento della linea dell'indicatore da parte del prezzo è quel momento in cui la differenza Ask- -iCustom() era sotto lo zero durante il calcolo precedente e poi è salita, o viceversa

come calcolate questo momento sono affari vostri - forse dalla barra precedente, o ogni tick, ma tali combinazioni:

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;
Sarete condotti nel labirinto della matematica discreta più velocemente di quanto possiate ottenere il risultato che volete - l'espressione tra parentesi sarà o 0 o 1, che corrisponde alla rappresentazione numerica di falso e vero
 
IgorM:


qualsiasi incrocio è considerato in modo ottimale come la differenza del prezzo (Ask/Bid) e la linea dell'indicatore, cioè

se (Ask-iCustom ("EURUSD", Period_H1, "Indicatore",0,0) > 0) Comment("Prezzo sopra l'indicatore"); altrimenti Comment("Prezzo sotto l'indicatore");

Se si confronta la differenza di questi valori, non è necessario normalizzarli per un confronto corretto

in particolare alla tua domanda - un attraversamento della linea dell'indicatore da parte del prezzo è quel momento in cui la differenza Ask- -iCustom() era sotto lo zero durante il calcolo precedente e poi è salita, o viceversa

Come calcolate questo momento è affar vostro - può essere sulla barra precedente, o ogni tick, ma tali combinazioni:

Sarete condotti nel labirinto della matematica discreta più velocemente di quanto possiate ottenere il risultato che volete - l'espressione tra parentesi sarà o 0 o 1, che corrisponde alla rappresentazione numerica di falso e vero

Cioè, se ho capito bene, posso fare questo:

bool intersectionX = FALSE,
     intersectionY = FALSE;
int start()

  { 
if  (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) == 0)  {
intersectionX = TRUE;
intersectionY = FALSE;
}
if  (iCustom ("EURUSD", Period_H1, "Indicator",1,0)-Bid == 0) {
intersectionY = TRUE;
intersectionX = FALSE;
}
}
и я потом смогу intersectionY использовать только тогда когда оно TRUE, если FALSE, то такой код (intersectionY > Ask) не сработает, правильно я понимаю!?
Motivazione: