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

 
(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);
 
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...

 
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");
}