Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 247

[Eliminato]  
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

Ho fatto una formula per calcolare il lotto, puoi dirmi dove potrebbe essere l'errore? L'ordine non si apre a causa di alcuni errori.

La formula è ancora valida per un deposito di 100$ e oltre, con una leva di 1-100 e oltre. E se il deposito senza leva 1 000$ risulta che la formula non funziona perché abbiamo FreeMargin/Contract = 0.01 e non possiamo dedurre da questo valore perché non soddisferemo le condizioni di trading.


D'altra parte, perché dedurlo, se FR&Margin tiene già conto delle posizioni aperte? Allora sarebbe così

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

Andrò a testarlo.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: Ho fatto una formula per calcolare il lotto, puoi dirmi dove potrebbe essere l'errore? L'ordine non si apre a causa di alcuni errori.
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
[Eliminato]  
STARIJ:

Saluti)) Cos'è lo 0,65? Da dove viene?

Stavo pensando alla leva, ma sono arrivato alla conclusione che l'equilibrio è in teoria già impostato con la leva. O mi sbaglio?


Lo 0,65 è una riserva per il 35% di slittamento o cosa? A proposito, è una buona idea, perché se imposti il lotto in questo modo, perderai una posizione e sarà la fine della corsa!

Mi piace! La formula ha funzionato dopo che ho rimosso le perdite, è forte)) in breve, il lotto era 0,02, poi quando tre posizioni sono andate in drawdown, il lotto di emergenza è stato calcolato come 0,1, cioè 5 volte! Tuttavia, la mia funzione è sensibile a ulteriori perdite quando viene aperto un ordine di emergenza, quindi non dovrebbero esserci problemi.

Collega, grazie per i preziosi pensieri! Andrò a testarlo!


Ho anche deciso di controllare le condizioni di trading. Ti piace questo codice?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
File:
1.gif  10 kb
 
geratdc: Collega, grazie per i preziosi pensieri! Andrò a testarlo!

Se lo capovolgi - COMPRA invece di VENDI e VENDI invece di COMPRA - sarà meglio

Provaci, collega!!!

Il robot, invece di affermare un fatto, deve emettere una raccomandazione: Capo, aggiungi soldi. Ho già sprecato quelle...

[Eliminato]  
STARIJ:

Se lo invertiamo - COMPRARE invece di VENDERE e VENDERE invece di COMPRARE - sarà meglio

Provaci, collega!!!

Il robot, invece di affermare un fatto, dovrebbe dare raccomandazioni: Capo, aggiungi soldi. Li hai già sprecati...


Va bene, c'erano impostazioni appositamente lasciate per innescare un ordine di emergenza - dovevo vedere cosa avrebbe raccolto il lotto.

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

Ho lasciato questo per ora. Ho provato con il bilanciamento, credo che sarà più preciso in termini di margine, ma il risultato è lo stesso. Guardiamo i risultati del test più tardi.

 
geratdc: Non c'è problema.

Internet è di nuovo attivo! Posso scrivere a un'e-mail?

 
STARIJ:

È così che dovrebbe essere? Livelli -0,75 e +0,75.

È più facile usare una sola variabile. Prima 0. Poi +1 -1 +1 -1


Sì, così. Come devo scriverlo nell'Expert Advisor in modo tale che quando viene lanciato, se siamo in un gap tra livelli, prende il valore dell'ultimo da cui siamo rimbalzati?

 
AlGuru: Ma come faccio a scriverlo nell'EA in modo che quando parte, se siamo nel gap tra livelli, prende il valore dell'ultimo da cui siamo rimbalzati?

In che senso "combattuto"? Ci ha attaccato? Combattuto quando - prima del lancio? Come potremmo reagire se ci fossimo appena lanciati? Leggete prima di inviarlo - ha tutto senso?

 
STARIJ:

Che cosa intende per combattere? Ci ha attaccato? Siamo stati battuti prima del lancio? Come potremmo reagire se ci siamo appena lanciati? Leggilo prima di inviarlo - ha senso?


Ok, non ha rimbalzato, ma ha prodotto un rimbalzo dalla linea. A condizione che l'EA sia posizionato su un'altra macchina/terminale o in caso di arresto del computer, riavviando il terminale, esso (l'EA) inizia a lavorare immediatamente calcolando l'ultimo livello di prezzo e impostando il giusto valore della variabile, piuttosto che aspettare che il prezzo raggiunga il livello desiderato. Spero di averlo descritto chiaramente.

 
AlGuru:  Ok, non ha rimbalzato, ma ha prodotto un rimbalzo dalla linea. A condizione che l'EA sia posizionato su un'altra macchina/terminale o in caso di spegnimento del computer, riavviando il terminale, esso (l'EA) inizia a lavorare immediatamente calcolando a quale livello era l'ultimo prezzo e impostando il giusto valore della variabile, piuttosto che aspettare che il prezzo raggiunga il livello desiderato. Spero di averlo descritto chiaramente.

Che cosa ha a che fare con un'altra macchina o terminale? O spegnimento - riavvio. Intendi accendere il computer o riavviare l'Expert Advisor? Perché deve essere un rimbalzo, ma se lascia la linea di livello e torna indietro? E se aspetta - sta solo saltando un'opportunità quando si accende. Puoi scartarlo all'inizio e tornarci quando hai finito. E poi da dove vengono le linee, quando appaiono, chi le mette, o come le calcola l'EA. Se vengono messi su un altro computer o prima che il computer venga spento, il prezzo può andare lontano. Se i livelli sono calcolati dall'Expert Advisor stesso, questo è un altro discorso. Guardate ora: il prezzo è rimbalzato dal livello superiore e ha vagato tra i livelli per un'ora. E poi abbiamo acceso il computer e attivato l'Expert Advisor. Ovviamente, dobbiamo attribuire il tempo di azione a questo rimbalzo. È passata un'ora e il rimbalzo è dimenticato. Vedete, ci sono un sacco di domande! E lei è chiaro. Vi è chiaro, conoscete l'essenza della questione. Ma dall'esterno è l'oscurità. L'arte della programmazione è la capacità di fare molte domande e trovare risposte. Dai un'occhiata allo script - forse c'è un punto razionale qui

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}