Expériences avec MetaTrader 5 chez Discovery - page 16

 
Une autre question, quelle est sa construction ? 803 ?
 

construire 803. Le compte est le vrai 10267.

J'en déduis que puisqu'il y a tant de questions, je suis le seul à avoir des "mnj" ?

Il y a encore 3-4 semaines, le testeur était un peu plus correct en termes d'écarts, mais en termes de comportement...

Le problème était le suivant : pratiquement tous les chandeliers se formaient, disons, dans les 20 ticks, puis dans les 50-100 ticks ou le prix montait ou descendait de 10 points à l'extremum ou près de la clôture. Et ce rythme a été facilement trouvé par un testeur qui a optimisé le scalpeur.

D'une manière générale, le testeur ne convient pas aux stratégies scalper/pipsewing.

Je comprends la lenteur du testeur de tics. Mais pour l'échange, à mon avis, vous ne pouvez pas vous en passer.

 
dimeon:
Comment dois-je procéder ?

Ouvrez le graphique. Ouvrez la fenêtre Données. Faites défiler le graphique jusqu'au moment souhaité. Déplacez la souris sur le graphique et voyez les valeurs d'écart dans la fenêtre de données.

Je l'ai déjà examiné. Sur un grand nombre de barres - zéro écart. C'est-à-dire que les données sont incomplètes. Avec une valeur d'écart nulle, la dernière valeur non nulle est utilisée.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
La situation est différente chez le testeur. Le visualiseur montre que dans la première moitié de la journée, l'écart est hors norme, dans l'après-midi, il est de 20-50 pips en moyenne et dans la session du soir, il est à nouveau hors norme.
 

Je vais vous expliquer en images ce qui se passe dans le testeur.

Le testeur télécharge les données historiques pour au moins l'année précédente avant le début des tests et analyse l'écart. Si les tests commencent au 01.01.2013, alors le dernier écart non nul en 2012 a été enregistré le 10.12.2012 à 10 h 09, et il était de 2990 points.


Le prochain écart non nul est enregistré le 2013.03.15 à 18:49 pour un montant de 1190.


Entre ces moments, l'écart est de 0. Autrement dit, du 1er janvier 2013 au 15 mars au soir, le dernier écart connu était de 2990 (ce que j'ai appelé "la dernière valeur non nulle"). Jusqu'à ce que cette dernière valeur non nulle devienne 1190.

Après cela, nous avons à nouveau des valeurs d'écart nulles, c'est pourquoi nous avons utilisé 1190. Ceci a été enregistré jusqu'au 2013.03.18 18:46.


après 3 minutes supplémentaires.


Il y avait alors beaucoup moins de zéros qu'au début de l'année. Néanmoins, la série de zéros est restée.

Cela explique la série d'écarts identiques

La situation est désagréable, nous allons la résoudre. Les écarts dans le testeur seront suffisants.

 

Les spreads seront réglés, nous les fixerons correctement même si le courtier n'a pas importé les spreads détaillés dans son historique.

Cela permettra d'effectuer des tests normaux.

 
stringo:

Je vais vous expliquer en images ce qui se passe dans le testeur.

Le testeur charge les données historiques d'au moins l'année précédente avant le début des tests et analyse l'écart. Si les tests commencent à partir du 01.01.2013, alors le dernier écart non nul en 2012 a été enregistré le 10.12.2012 à 10 h 09, et il était de 2990 points.


Le prochain écart non nul est enregistré le 2013.03.15 à 18:49 pour un montant de 1190.


Entre ces moments, l'écart est de 0. Autrement dit, du 1er janvier 2013 au 15 mars au soir, le dernier écart connu était de 2990 (ce que j'ai appelé "la dernière valeur non nulle"). Jusqu'à ce que cette dernière valeur non nulle devienne 1190.

Après cela, nous avons à nouveau un écart nul, c'est pourquoi nous avons utilisé 1190. Ceci a été enregistré jusqu'au 2013.03.18 18:46.


après 3 minutes supplémentaires.


Il y avait alors beaucoup moins de zéros qu'au début de l'année. Néanmoins, la série de zéros est restée.

Cela explique la série d'écarts identiques.

La situation est désagréable, nous allons la résoudre. Les écarts dans le testeur seront suffisants.

Il est inutile de tester les futures du début de l'année, car tout le monde a négocié celui de mars.

Il serait plus raisonnable de calculer l'écart moyen en l'arrondissant correctement.

Veuillez également réduire les volumes pour le testeur. La plupart des ticks surviennent lorsque le prix ne bouge pas du tout en réalité. Dans le testeur, le prix atteint l'extremum de nombreuses fois, ce qui se traduit par des tests inadéquats. Et le temps d'optimisation est réduit.

 

1. a) A propos des futures collés... pas vraiment compris, mais à mon avis le testeur ne fonctionne pas avec eux (pas un seul trade, j'ai essayé de tester les EAs standards qui sont dans le terminal).

b) Dans mt5 de bx il y a déjà des futures collés des principales blue chips, continuez.

c) Il serait formidable de pouvoir définir les spreads manuellement dans le testeur, il serait beaucoup plus facile d'optimiser les stratégies.

 

2. a) A propos du flux... cela ne ferait pas de mal de l'avoir sous forme de tableau des transactions comme dans Quicksilver (en tant qu'outil enfichable et déconnectable bien sûr), et aussi la possibilité de définir des filtres dans le tableau comme dans Quicksilver (par exemple, je veux voir seulement les grosses transactions avec un volume de 100 lots et comment elles sont passées, par l'offre ou par la demande)... Je répète - cela ne ferait pas de mal, mais ce n'est pas si nécessaire.

b) Mais pour ajouter à la structure MqlTick obtenue (SymbolInfoTick(_Symbol,latest_price)) un autre paramètre sur la façon dont la transaction s'est ouverte à l'offre ou à la demande - je pense que c'est nécessaire, ou comme une demande distincte d'informations sur le marché, cette information est transmise par la bourse et elle est requise pour de nombreux robots, y compris le mien. Calculer si une transaction était un achat ou une vente n'est pas réaliste... car il y a des transactions de gré à gré avec de grands volumes qui ne font pas bouger le marché directement et beaucoup d'autres nuances... L'ajout de ce paramètre à la structure, je pense, ne sera pas difficile pour les développeurs, et apportera beaucoup d'avantages.

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен - Документация по MQL5
 

3. Lorsque vous essayez de passer des ordres en attente, un EA affiche l'erreur "Invalid order expiry date in request". Par exemple, j'ai fait un EA qui ne place que des ordres en attente mais ne fait rien d'autre... Dans MT5 sur le forex, il place des ordres en attente normalement, mais sur FORTS, l'erreur sort. La date d'expiration de l'ordre est adéquate - je l'ai vérifié en l'affichant à l'écran. Suis-je le seul à avoir un tel problème ? Quelle en est la raison ? Code du conseiller expert ci-dessous


#property copyright "Copyright 2013, MetaQuotes Software Corp."

#property link      "http://www.mql5.com"

#property version   "1.00"

input int tp=150;

input int Deviation=5;

MqlTradeRequest mrequest; 

MqlTradeResult mresult;   

int OnInit()

  {

   return(0);

  }

void OnDeinit(const int reason)

  {

  }


void OnTick()

  {

   Open_Pending_Order(1,SymbolInfoDouble(_Symbol,SYMBOL_BID)+NormalizeDouble(tp*_Point,_Digits), 1, 111);

   Sleep(500);

  return;

  }

//+------------------------------------------------------------------+

void Open_Pending_Order(int type, double prise, double lot, long magic)

  {

   ZeroMemory(mrequest);

   mrequest.action = TRADE_ACTION_PENDING;                               

   mrequest.magic = magic;                                              

   mrequest.symbol = _Symbol;                                            

   mrequest.type_filling = ORDER_FILLING_RETURN;                            

   mrequest.deviation=NormalizeDouble(Deviation*_Point,_Digits);                                                

   mrequest.type_time=ORDER_TIME_SPECIFIED;

   mrequest.expiration=TimeCurrent()+6000;                                    

   mrequest.volume = lot; 

   mrequest.sl = 0;  

   mrequest.tp = 0; 

   mrequest.price = prise;

   Print(" время экспирации ",mrequest.expiration," тип экспирации  ",mrequest.type_time," цена ",mrequest.price);

    if(type==1)

      {                                    

       mrequest.type = ORDER_TYPE_BUY_STOP;                              

       OrderSend(mrequest,mresult);

       // анализируем код возврата торгового сервера

       if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Buy по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order," !!");  

       else Print("Запрос на установку ордера Buy по символу ",_Symbol, " с маджиком ",magic," не выполнен - ответ сервера:" , mresult.retcode," код ошибки " ,GetLastError());

      }

    if(type==2)

      {                                    

       mrequest.type = ORDER_TYPE_SELL_LIMIT;     

       OrderSend(mrequest,mresult);

       // анализируем код возврата торгового сервера

       if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Sell по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order,"!!");

       else Print("Запрос на установку ордера Sell  по символу ",_Symbol, " с маджиком ",magic," не выполнен - код ошибки:" , mresult.retcode,"  " ,GetLastError());                         

      }

   return; 

  }

Il dit (j'ai essayé de changer le temps d'expiration) :

2013.04.24 17:40:05 udalit (SBRF-6.13,M1) La demande de placement d'un ordre d'achat par SBRF-6.13 avec le numéro magique 111 a échoué - réponse du serveur : 10022 code d'erreur 4756

2013.04.24 17:40:05 udalit (SBRF-6.13,M1) Heure d'expiration 2013.04.25 17:00:00 Type d'expiration 2 Prix 10016.0