Mon mécontentement au testeur de stratégie. aux développeurs MQL - page 2

 
Alexey Volchanskiy:

Renat, je profite de l'occasion pour demander, puisque vous êtes là. Y aura-t-il des services dans la nouvelle construction ou est-ce reporté pour le moment ?

Plus tard.

En attendant, vous pouvez écrire des flux de données pour les instruments synthétiques qui n'en ont pas.

 
Renat Fatkhullin:

Plus tard.

En attendant, je peux écrire des flux de données pour des outils synthétiques sans eux.


Je veux du multithreading, j'espérais que cela pourrait être fait avec des services. Personnellement, je n'ai pas encore besoin de flux de données.

 

Bonne journée à vous tous.

Non, ce post n'est pas une connerie comme quelqu'un d'autre l'a écrit.

Je suis en pleine serge.

Je comprends que ce que les programmeurs écrivent et disent fonctionne, mais je suis désolé.

Si nous travaillons tous avec des données erronées sur le courtier, je comprends tout de suite que mes résultats ne sont pas erronés.

Le fait est que, ironiquement, j'ai peut-être étudié à l'université pour devenir un ingénieur statisticien.

Donc, pour moi, les données erronées sont en général des données fausses ; par conséquent, pour dire que 99% de ce que je vois fonctionne, en tant qu'homme de statistiques, je dis que je ne sais pas, tout comme vous et tous ceux qui lisent ce post.

La solution est ce que j'ai écrit ci-dessus.

Collecter des tics, tout le monde peut le faire avec un simple robot/algorithme.

Le fait est que ni dans 5 ni dans 4 MQL, nous ne disposons des données de marché qui devraient être utilisées pour tester les stratégies.

Pour les stratégies à long terme, je ne pense pas qu'un robot soit nécessaire.

Pour moi, c'est ticks pour ticks et j'ai des idées intéressantes pour étudier l'asc et l'enchère par tick.

Désolé pour la longueur de la réponse et du délai, j'ai été très occupé.

Cordialement, Ivan S.

 
Alexey Volchanskiy:

J'ai écrit une fois, je la retrouverai.

Pour cinqhttps://www.mql5.com/ru/code/18046

Pour quatrehttps://www.mql5.com/ru/code/18047

Pour un six,https://www.mql5.com/ru/code/.


Vous seriez surpris, mais c'est la même chose pour 5 et 4.

Je peux parler pour 4 et 5 en même temps !


Je n'ai pas lu l'intégralité du code de votre algorithme, mais cette partie du code sert essentiellement à la sauvegarde, mais je dois maintenant reproduire cette demande et la faire sortir par le testeur de stratégie.

S'il y a des programmeurs qui peuvent faire cela, je les écoute très attentivement !

 
Renat Fatkhullin:
Si je ne me trompe pas, dans mt5 le testeur est sur des ticks réels où le bid/ask est réel ?

Renat a vérifié que mql5 fonctionne de la même manière que dans 4 mql.

 
Ivan Stepanenko:

Renat a vérifié que mql5 fonctionne de la même manière qu'avec 4 mql.


le problème a été résolu il y a longtemps.

1. La question a déjà été résolue. Pour MQL5, le test sur des ticks réels est disponible depuis environ un an. Si seulement vous aviez étudié le terminal...

2. Pour MQL4, vous pouvez utiliser vos propres fichiers .fxt. La méthode la plus simple consiste à utiliser TickStory Lite, qui télécharge les tics réels de Ducas.

 
Ivan Stepanenko:

renat a vérifié que mql5 fonctionne de la même manière qu'il fixe un écart fixe. comme dans 4 mql.


un mensonge

Nous prenons mon Expert Advisor pour les ticks sauvegardant SaveTicks, le lien vers le CodeBase que j'ai donné ci-dessus, et nous l'exécutons dans le testeur en mode"Every tick based on real ticks". Voyons ce que contient le fichier de sortie, dans mon cas : \Tester\Agent-127.0.0.1-3000\MQL5\Files\EURUSD_SaveTicks.csv

2017.11.28 09:11:16,1.1895,1.18952

2017.11.28 09:11:16,1.1895,1.18952

spread 2

2017.11.28 09:11:26,1.18947,1.18951

2017.11.28 09:11:26,1.18947,1.18951

spread 4
 

Regardez le navigateur de caractères, et il y a des coches pour tous les caractères.

Ce sont les ticks réels utilisés dans le testeur.

 
Ivan Stepanenko:

Bonne journée à vous tous.

Non, ce post n'est pas une connerie comme quelqu'un d'autre l'a écrit.

Je suis en pleine serge.

Je comprends que ce que les programmeurs écrivent et disent fonctionne, mais je suis désolé.

Si nous travaillons tous avec des données erronées sur le courtier, je comprends tout de suite que mes résultats ne sont pas erronés.

Le fait est que j'ai peut-être ironiquement étudié à l'université pour devenir un ingénieur statisticien.

Donc, pour moi, les données erronées sont en général des données fausses ; par conséquent, pour dire que 99% de ce que je vois fonctionne, en tant qu'homme de statistiques, je dis que je ne sais pas, tout comme vous et tous ceux qui lisent ce post.

La solution est ce que j'ai écrit ci-dessus.

Collecter des tics, tout le monde peut le faire avec un simple robot/algorithme.

Le fait est que ni dans 5 ni dans 4 MQL, nous ne disposons des données de marché qui devraient être utilisées pour tester les stratégies.

Pour les stratégies à long terme, je ne pense pas qu'un robot soit nécessaire.

Pour moi, c'est ticks pour ticks et j'ai des idées intéressantes pour étudier l'asc et l'enchère par tick.

Désolé pour la longueur de la réponse et du délai, j'ai été très occupé.

Cordialement, Ivan S.

Et votre grammaire ? //Je dis juste...

Si tout est si grave, la solution à votre question est la suivante :

Rassemblez les statistiques, l'histoire des citations et le travail, Alexey Volchansky a déjà tout trouvé pour vous et a donné les liens ci-dessus.

Sur la demande - vous pouvez télécharger l'historique avec la demande et les offres de DucasCopy (google le).

Bonne chance !
 

Voici quelques articles intéressants :


En outre, dans la version bêta d'hier de MetaTrader 5, à laquelle vous pouvez accéder à partir de MetaQuotes-Demo, il existe un système complet de création de symboles personnalisés.

Vous pouvez désormais créer des instruments financiers synthétiques - des instruments basés sur un ou plusieurs instruments existants. Il vous suffit de spécifier la formule de calcul des cotations, et la plateforme va générer les ticks de l'instrument synthétique en mode temps réel et créer son historique de minutes.

Comment cela fonctionne

  • Vous créez un symbole synthétique et définissez une formule pour celui-ci.
  • La plateforme calculera ses ticks à raison de 10 fois par seconde (et seulement si le prix d'au moins un instrument inclus dans la formule a changé).
  • La plateforme calculera l'historique des barres minutes (pour les deux derniers mois) sur la base des barres minutes des instruments inclus dans sa formule. Toutes les nouvelles barres (actuelles et ultérieures) seront construites en temps réel sur la base des ticks générés par l'instrument synthétique.
Par exemple, vous pouvez créer un outil qui affichera l'indice du dollar (USDX). Sa formule sera la suivante :
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Remarque : la formule originale de l'indice dollar utilise les paires USDEUR et USDGBP. Comme la plateforme ne dispose que de paires de devises inverses, la formule de l'outil synthétique utilise un degré négatif pour celles-ci et le prix Ask au lieu du Bid.

En temps réel, la plateforme calculera le prix du nouvel instrument sur la base des cotations des six autres instruments fournies par votre courtier. Dans le Market Watch et sur le graphique, vous verrez comment son prix évolue :



Créez un nouvel instrument personnalisé, ouvrez sa spécification et spécifiez la formule :




Pour plus de commodité, l'éditeur de formules affiche une liste des options possibles au fur et à mesure que vous saisissez les noms des instruments et des fonctions.

Le calcul des ticks et des barres de minutes de l'instrument synthétique commencera lorsqu'il sera ajouté à "Market Watch". Tous les symboles nécessaires à son calcul seront automatiquement et immédiatement ajoutés au "Market Watch". Un enregistrement du début du calcul sera ajouté au journal de la plateforme : Symbole synthétique USDX : le traitement a commencé.
  • Le calcul de l'instrument synthétique s'arrête lorsqu'il est caché de Market Watch.
  • Les symboles qui sont actuellement utilisés pour calculer les instruments synthétiques ne peuvent pas être cachés du Market Watch.

Calculer des devis en temps réel
Toutes les 100 ms (dix fois par seconde), nous vérifions si le prix d'au moins un instrument impliqué dans la formule a changé. Si c'est le cas, le prix de l'instrument synthétique est calculé et un tick est généré. Le calcul est effectué en parallèle dans trois flux pour les prix Bid, Ask et Last. Par exemple, si EURUSD*GBPUSD est spécifié dans la formule, le calcul du prix de l'instrument synthétique sera le suivant :

  • Bid - bid(EURUSD)*bid(GBPUSD)
  • Ask - ask(EURUSD)*ask(GBPUSD)
  • Last - last(EURUSD)*last(GBPUSD)

La présence de changements est vérifiée pour chaque prix séparément. Par exemple, si dans le calcul suivant, seul le prix Bid de l'instrument initial a changé, alors seul le prix, où il y a eu des changements, sera calculé pour le tick de l'instrument synthétique.

Construire l'histoire des barres minutes
En plus de collecter les ticks en temps réel, la plateforme crée également un historique minute d'un instrument synthétique. Ainsi, un trader peut visualiser ses graphiques comme s'il s'agissait d'instruments ordinaires et effectuer une analyse technique sur ceux-ci en utilisant des objets et des indicateurs.

Dès que le trader ajoute un instrument synthétique à la Market Watch, la plateforme vérifie si un historique de minutes a été calculé pour cet instrument. Sinon, il sera créé pour les 60 derniers jours, ce qui représente environ 50 000 barres. Si les barres maximales de la fenêtre dans les paramètres de la plateforme ont une valeur inférieure, c'est cette limite qui sera utilisée.

Si certains des bars de cette période sont déjà construits, la plateforme en créera de nouveaux. Un historique plus profond n'est créé que lorsque vous essayez de visualiser l'horizon temporel correspondant sur le graphique (si vous faites défiler l'historique ou si vous le demandez au programme MQL5).

L'historique des barres minutes d'un instrument synthétique est calculé sur la base des barres minutes (et non des ticks) des instruments inclus dans sa formule. Par exemple, pour calculer le prix de la barre Open minute d'un instrument synthétique, la plateforme prend les prix des instruments Open inclus dans sa formule. Les prix de High, Low et Close sont calculés de la même manière.

Si vous n'avez pas de barre minute dans la formule pour un symbole, la plateforme utilisera le prix de clôture de la barre précédente. Par exemple, vous pouvez utiliser trois symboles : EURUSD, USDJPY et GBPUSD. Si l'USDJPY n'a pas de barre minute correspondant à 12:00, les prix suivants seront utilisés pour le calcul :

  • Pour l'ouverture - EURUSD ouvert 12:00, USDJPY fermé 11:59, GBPUSD ouvert 12:00
  • Pour le haut - EURUSD haut 12:00, USDJPY clôture 11:59, GBPUSD haut 12:00
  • Pour le bas - EURUSD bas 12:00, USDJPY clôture 11:59, GBPUSD bas 12:00
  • Pour la clôture - EURUSD clôture 12:00, USDJPY clôture 11:59, GBPUSD clôture 12:00

Si tous les symboles de la formule n'ont pas de barre minute, la barre minute synthétique correspondante ne sera pas calculée.

Construction de nouveaux mini-bars
Toutes les nouvelles barres (actuelle et suivante) de l'outil synthétique sont créées sur la base des ticks générés. Le prix auquel les barres sont construites dépend du paramètre "Construction de la carte" du cahier des charges :





Quelles opérations peuvent être utilisées dans la formule de l'outil
Vous pouvez utiliser les données de prix ainsi que certaines propriétés des symboles disponibles (fournies par votre courtier) dans votre formule. Pour ce faire, spécifiez :

  • Nom du symbole - en fonction du prix synthétique du symbole, la formule utilisera le cours acheteur, vendeur ou dernier prix du symbole spécifié. Par exemple, si vous spécifiez EURUSD*GBPUSD, le cours acheteur sera calculé comme Bid(EURUSD)*bid(GBPUSD), et le cours vendeur - comme Ask(EURUSD)*ask(GBPUSD).
  • Bid(nom du symbole) - pour calculer le prix Bid d'un symbole synthétique, le prix Bid du symbole spécifié sera utilisé de manière forcée. En fait, cette variante correspond à la précédente (sans spécifier de type de prix).
  • Ask(nom du symbole) - le prix Ask du symbole spécifié sera obligatoirement utilisé pour le calcul du prix Bid de l'instrument synthétique. Pour calculer le prix Ask, au contraire, le prix Bid du symbole spécifié sera utilisé. Pour calculer le dernier prix, le dernier prix du symbole spécifié sera utilisé. Par exemple, si vous spécifiez Ask(EURUSD)*GBPUSD, le calcul sera le suivant :
    • Bid = ask(EURUSD)*bid(GBPUSD)
    • Ask = bid(EURUSD)*ask(GBPUSD)
    • Dernier = dernier(EURUSD)*dernier(GBPUSD)
  • last(nom du symbole) - le dernier prix du symbole spécifié sera utilisé pour calculer tous les prix synthétiques du symbole (Bid, Ask et Last). Par exemple, si vous spécifiez last(EURUSD)*GBPUSD, le calcul sera le suivant :
    • Bid = last(EURUSD)*bid(GBPUSD)
    • Ask = last(EURUSD)*ask(GBPUSD)
    • Dernier = dernier(EURUSD)*dernier(GBPUSD)
  • volume(Nom du symbole) - la formule utilisera le volume du tick pour le symbole spécifié. Veuillez vous assurer que les informations sur le volume sont traduites pour l'instrument spécifié.
  • point(nom du symbole) - la taille de la variation minimale du prix d'un instrument spécifié sera utilisée dans la formule.
  • digits(nom du symbole) - le nombre de décimales du prix du symbole spécifié sera substitué dans la formule.

Si un symbole a un nom complexe (contenant des traits d'union, des points, etc.), il doit être placé entre guillemets. Par exemple, "RTS-6.17".
Les opérations arithmétiques peuvent être utilisées dans la formule : addition (+), soustraction (-), multiplication (*), division (/) et reste de la division (%). Par exemple, EURUSD+GBPUSD signifie que le prix est calculé comme la somme de EURUSD et GBPUSD. Vous pouvez également utiliser un moins unaire dans la formule pour changer le signe, par exemple : -10*EURUSD.

Il existe une priorité pour les opérations arithmétiques :

  • Les opérations de multiplication, de division et de reste sont effectuées en premier, puis les opérations d'addition et de soustraction sont effectuées.
  • Les opérations s'effectuent de gauche à droite. Si plusieurs opérations sont utilisées dans une formule, qui ont la même priorité (par exemple, multiplication et division), l'opération de gauche sera exécutée en premier.
  • Les parenthèses ( et ) peuvent être utilisées pour modifier la priorité des opérations. Les expressions entre parenthèses ont la plus haute priorité dans le calcul. Le principe de gauche à droite s'applique également à eux : les expressions entre parenthèses à gauche dans une formule sont calculées en premier.

Des constantes peuvent également être utilisées dans la formule :

  • Numérique (nombre entier et réel avec un point). Par exemple, EURUSD*2+GBPUSD*0,7.
  • Les propriétés des symboles _Digits et _Point. Ils substituent les propriétés du symbole personnalisé de la spécification dans la formule. _Digits - nombre de décimales dans le prix du symbole, _Point - taille de la variation minimale du prix du symbole.

En outre, toutes les fonctions mathématiques prises en charge dans MQL5 peuvent être utilisées dans la formule, à l'exception de MathSrand, MathRand et MathIsValidNuber. Seuls des noms courts sont utilisés pour toutes les fonctions : fabs(), acos(), asin(), etc.