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

 

Buon pomeriggio.

Mi si è rotto il cervello sul perché il seguente algoritmo non funziona. Non passa un array nella funzione. All'inizio stavo cercando la ragione, ma sono riuscito a trovarla in questo esempio di test.

Rapporti: "Impossibile trovare 'functest' in 'TestLib.ex4' " quindi "chiamata di funzione di importazione non risolta".

Contenuto del file Test.mq4

#proprietà rigorosa
#include <TestLibx.mqh>

massa int [5];

int OnInit() { return(INIT_SUCCEED); }
void OnDeinit(const int reason) { }

void OnTick()
{
(massa);
int c=0;
for (c=0;c<5;c++) Print (" mass[",c,"]=",mass[c]," ");
Dormire(2000);
}

Contenuto del file di libreria TestLibx.mq4

#proprietà biblioteca
#proprietà rigorosa
void functest (int &massx[])
{
int c=0;
mentre (c<5)
{
massx[c]=MathRand();
c++;
}
ritorno;
}
Contenuto del file di libreria TestLibx.mqh

#proprietà rigorosa
#importare "TestLibx.ex4"
void functest (int &massx[]);
#importare

Allega i file originali all'archivio.

Per favore aiutatemi a capire come passare gli array in MQL4 alla funzione di libreria.

Grazie.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
File:
MQL4.zip  11 kb
 
Alexey Viktorov:
La differenza di valori è maggiore di 10*Punto, ma dobbiamo considerare se la differenza sarà positiva o negativa.

Grazie. Voglio trasferire per scambiare punti e commissioni. Cosa c'è di sbagliato in questo?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//
 
bij:

Grazie. Voglio trasferire per scambiare punti e commissioni. Cosa c'è che non va?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

Grazie.

Op, hai cambiato la tua risposta, non ho bisogno di sapere il profitto. Scambio e commissione, ci può essere più di una posizione.

 
bij:

Grazie.

Op, qualcosa in cui hai cambiato la tua risposta, non ho bisogno di sapere il profitto. Scambio e commissione.

È solo che hai diviso per lotto e hai bisogno di moltiplicare.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

Il principio stesso ha mostrato quello che uso. E applicarlo al vostro codice è abbastanza semplice.

 
Konstantin Nikitin:

È solo che hai la divisione per lotto e devi moltiplicare.

Il principio stesso ha mostrato quello che uso. E applicarlo al vostro codice è abbastanza facile.

Capisco, grazie.
 

Ciao!

Domanda: L'indicatore crea oggetti grafici(OBJ_ARROW), ma alcuni di essi appaiono solo dopo la compilazione o il cambio di timeframe. Non ci sono errori o avvertimenti durante la compilazione. Nel tester, Print("Error calling ObjectCreate():",GetLastError());0, Print("Error calling ObjectCreate():",GetLastError());4200.

Se non ti dispiace rispondere a un idiota!

 
Come può il tester caricare programmaticamente le quotazioni per un periodo di tempo diverso (più piccolo)?
 
Juer:
Come può il tester caricare programmaticamente le quotazioni per un periodo di tempo diverso (più piccolo)?
Il timeframe alto si basa sui dati di quello basso. Quindi non è necessario.
 
bij:
Chiudi la posizione se il tempo corrente = tempo di apertura più 5 minuti o all'apertura di una nuova barra se il periodo del grafico è M5.

Grazie. E' andata meglio. Ma ora c'è un altro problema. Il tester continua a darmi risultati al 100%. Ma non funziona così. Molti trade sono aperti e normalmente chiusi dopo il tempo specificato secondo il log. Tuttavia, non tutte le operazioni sono redditizie secondo il grafico dei risultati dove possiamo vedere i momenti di apertura e chiusura delle posizioni. Quale può essere la ragione di una tale sinistra al 100%?

Grazie anche ad Artem!

Motivazione: