Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 582

 

Bon après-midi.

Je me suis cassé la tête à comprendre pourquoi l'algorithme suivant ne fonctionne pas. Il ne passe pas un tableau dans la fonction. Au début, je cherchais la raison, mais j'ai réussi à la trouver dans cet exemple de test.

Signale : "Impossible de trouver 'functest' dans 'TestLib.ex4' " puis "appel de fonction d 'importation non résolu".

Contenu du fichier Test.mq4

#propriété stricte
#include <TestLibx.mqh>

masse int [5] ;

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

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

Contenu du fichier de la bibliothèque TestLibx.mq4

#bibliothèque de propriété
#propriété stricte
void functest (int &massx[])
{
int c=0 ;
while (c<5)
{
massx[c]=MathRand() ;
c++ ;
}
retour ;
}
Contenu du fichier de la bibliothèque TestLibx.mqh

#propriété stricte
#import "TestLibx.ex4"
void functest (int &massx[]) ;
#import

Joignez les fichiers originaux à l'archive.

Veuillez m'aider à comprendre comment passer des tableaux dans MQL4 à la fonction de la bibliothèque.

Merci.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
Dossiers :
MQL4.zip  11 kb
 
Alexey Viktorov:
La différence de valeurs est supérieure à 10*Point, mais nous devons déterminer si la différence sera positive ou négative.

Merci. Je veux faire un transfert pour échanger des points et des commissions. Qu'est-ce qui ne va pas avec ça ?

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:

Merci. Je veux faire un transfert pour échanger des points et des commissions. Qu'est-ce qu'il y a ?

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

Merci.

Op, tu as changé ta réponse, je n'ai pas besoin de connaître le bénéfice. Swap et commission, il peut y avoir plus d'une position.

 
bij:

Merci.

Op, quelque chose que tu as changé dans ta réponse, je n'ai pas besoin de connaître le profit. Échange et commission.

C'est juste que vous avez divisé par lot et vous devez multiplier.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

Le principe lui-même a montré ce que j'utilise. Et l'appliquer à votre code est assez simple.

 
Konstantin Nikitin:

C'est juste que vous avez une division par le lot et vous devez la multiplier.

Le principe lui-même a montré ce que j'utilise. Et l'appliquer à votre code est assez facile.

Je vois, merci.
 

Bonjour !

Question : L'indicateur crée des objets graphiques(OBJ_ARROW), mais certains d'entre eux n'apparaissent qu'après la compilation ou le changement d'horizon temporel. Il n'y a pas d'erreur ou d'avertissement pendant la compilation. Dans le testeur, Print("Error calling ObjectCreate() :",GetLastError());0, Print("Error calling ObjectCreate() :",GetLastError());4200.

Si cela ne vous dérange pas de répondre à un imbécile !

 
Comment le testeur peut-il charger par programme des devis pour une période différente (plus courte) ?
 
Juer:
Comment le testeur peut-il charger par programme des devis pour une période différente (plus courte) ?
Le cadre temporel haut est basé sur les données du cadre temporel bas. Donc, ce n'est pas nécessaire.
 
bij:
Fermez la position si l'heure actuelle = heure d'ouverture plus 5 minutes ou à l'ouverture d'une nouvelle barre si la période du graphique est M5.

Merci. Ça s'est amélioré. Mais maintenant il y a un autre problème. Le testeur continue à me donner des résultats de 100%. Mais ça ne marche pas comme ça. De nombreuses transactions sont ouvertes et normalement fermées après l'heure spécifiée selon le journal. Cependant, toutes les transactions ne sont pas rentables selon le tableau des résultats où l'on peut voir les moments d'ouverture et de fermeture des positions. Quelle peut être la raison d'une telle gauche à 100% ?

Merci aussi à Artem !

Raison: