une stratégie commerciale basée sur la théorie des vagues d'Elliott - page 273

 
<br / translate="no">Le calcul de Hearst pour 3000 barres dans MQL4 m'a pris environ 40 millisecondes. Nous n'entendons probablement pas la même chose (le mot "calcul"), alors si vous pouvez m'envoyer l'algorithme de votre calcul (de préférence) ou le code en MathCad (si nécessaire, je peux aussi utiliser Matcad).

Dans tous les cas, quelque chose ne va pas dans les calculs. Mon courriel est rosh AT metaquotes DOT ru.


Je me suis peut-être à nouveau mal exprimé. Je ne parlais pas d'un seul échantillon - 600 comptes pendant 20 minutes. En gros 500 itérations, c'est-à-dire premier échantillon, pour la zone morte [0 ; 100], deuxième [0 ; 101], puis [0 ; 102], [0 ; 103]..... [0 ; 600]. En outre, il s'agit de MathCAD, et les produits de cette classe ne sont pas les meilleurs en termes de calculs optimaux. Les développeurs ont introduit une optimisation sérieuse seulement dans la version 13 que j'utilise. Avant cela, même la résolution numérique d'une équation simple pouvait prendre beaucoup de temps.

Mon calcul de l'indice est légèrement différent de ce que l'on peut trouver dans les sources disponibles, mais je ne m'écarte pas de l'idéologie classique de Hearst. En d'autres termes, je ne peux pas dire que je calcule des statistiques par nom. :о) L'algorithme lui-même est écrit de manière optimale, vérifié et revérifié.

PS : Merci beaucoup pour votre volonté d'aider. Il est très possible qu'elle soit nécessaire. Je partagerai l'algorithme, si un meilleur mécanisme peut être mis en œuvre dans un avenir proche. J'ai quelques idées.
 
<br/ translate="no">Le calcul de Hearst pour 3000 barres dans MQL4 m'a pris environ 40 millisecondes. Il est fort probable que nous entendions par là des choses différentes (le mot calcul), alors si vous pouvez m'envoyer en termes généraux votre algorithme de calcul (de préférence) ou votre code en MathCad (si nécessaire, j'utiliserai également Matcad).


Il existe un grand nombre d'algorithmes. J'ai trouvé un calcul de spectre de singularité dans mes archives. Il est décrit conceptuellement dans de nombreux ouvrages, notamment par Feder, Bozhokin et bien d'autres. Le nombre d'itérations pour un échantillon est assez décent. En particulier, un processus itératif d'exponentiation est effectué pour estimer le "mouvement" apporté par chaque intervalle, révélant différents types de comportement du signal (par exemple, les intervalles "maintenant" avec des écarts plus importants par rapport à la tendance apportent plus de "mouvement", etc.)

Vous pouvez tout lire, mais laissez-moi vous rappeler la caractéristique principale - la valeur alpha, à laquelle F(alpha) atteint le maximum, est l'indice de Hurst généralisé (parfois, le paramètre d'horizon)


Calcul pour l'échantillon de 500 échantillons. L'indice de Hurst généralisé est égal à 0,6.


Et voici la série elle-même (jusqu'à la ligne rouge verticale) pour laquelle le calcul a été effectué et ce qui s'est passé ensuite.



Je ne me suis pas lancé dans le "business" (bien que ce soit très intéressant) car je n'ai pas encore compris certaines choses, notamment la méthode pour supprimer les tendances locales. L'utilisation de différentes méthodes donne lieu à différentes caractéristiques de la série. Une autre particularité est qu'elle nécessite des échantillons décents.

à Rosh, solandr

J'ai une question pour l'avenir. Je suis préoccupé par le fait que le conseiller expert sera "hors service" pendant un temps objectivement long et ne sera donc pas engagé dans le processus de suivi des ordres en cours. Je suppose que l'appel du script ne sera pas non plus utile - le conseiller expert attendra que le script soit exécuté. Je me suis donc demandé si je devais introduire une variable externe (ou globale, qu'est-ce qui est mieux ?), par exemple :

extern string SIGNAL_FORECAST



Lorsque je reçois un signal indiquant qu'il n'y a pas de prévision pour une raison quelconque, le conseiller expert définit la valeur appropriée de ce paramètre avec l'exigence de son exécution. A ce moment, un indicateur (il ne fait pas de prévisions mais a des fonctions de calcul) lit cette variable en permanence. Dès qu'il reçoit un ordre d'exécution de la prévision, il initialise le calcul, mais avant cela il écrit "calcul commencé" dans la variable. Après l'exécution "calcul effectué". Le conseiller expert lit que le calcul est effectué .....

Est-ce que tout cela va fonctionner ? C'est-à-dire que le conseiller expert sera théoriquement libéré de la charge de tout calculer ?

 
Bonjour Sergey. Il me semble que la meilleure façon de le faire est sous forme de bundle Expert+Expert ou Expert+Script. La deuxième option est préférable, je pense.
Le conseiller expert effectue des calculs et enregistre le drapeau du signal et les paramètres pertinents dans un ensemble de variables globales à la réception du signal. Le script ouvre les ordres en fonction des instructions reçues et les exécute. Le script tourne en boucle sans fin, modifiant lui-même la fréquence de cette boucle en fonction de la situation. Le conseiller expert, bien sûr, fonctionne après l'achèvement des calculs, par l'arrivée d'un tick.

L'indicateur ne convient pas ici car (pour autant que je sache) ses calculs sont interrompus lorsqu'un nouveau tick arrive.

En tout cas, j'ai décidé de suivre exactement ce schéma.
 
Les experts, les scripts et les indicateurs sont calculés dans MT4 en parallèle, c'est-à-dire en même temps avec un partage approprié des ressources CPU disponibles. Vous pouvez organiser 2 Expert Advisors, dont l'un calculera pendant plusieurs heures, et l'autre sera un exécuteur, qui par le biais de variables globales du terminal recevra les résultats du cycle précédent de calculs du premier Expert Advisor et effectuera les opérations commerciales nécessaires. Les deux conseillers experts travailleront indépendamment l'un de l'autre (en termes d'exécution). Le premier Expert Advisor sera lancé pour quelques heures à l'arrivée du premier tick, et le second sera lancé à chaque nouveau tick, ou, par exemple, avec une période spécifiée (dans le cas d'une boucle infinie avec la pause nécessaire).
 
Bonjour Sergey. Il me semble que la meilleure façon de le faire est sous la forme d'un bundle Expert+Expert ou Expert+Script. La deuxième option est préférable, je pense. <br/ translate="no">.

La seconde variante présente l'inconvénient de devoir passer manuellement ce même script au graphique à chaque nouveau lancement du terminal. On s'en lassera très vite. Il est préférable d'utiliser la première variante. Vous pourriez tout aussi bien organiser exactement la même boucle infinie dans la fonction start() que dans le script.
 
à Yurixx, solandr

Merci beaucoup pour les conseils. Je ne travaille pas avec MT depuis longtemps, pendant que je faisais des recherches, j'ai oublié que les scripts peuvent être exécutés en boucle et je n'ai même pas pensé à deux Expert Advisors.

Mais d'un autre côté, vous ne pouvez pas placer un testeur sur un tel astrolabe, n'est-ce pas ? Bien que ce ne soit probablement pas si crucial.

Merci encore. :о)))
 
Et si vous exécutez un script à partir de l'indicateur ? Dans ce cas, l'arrivée de nouvelles données dans l'indicateur interrompra toujours les calculs ?
 
2 grasn:
Pourtant, votre temps de calcul est trop long. Je pense que dans cette situation, il serait préférable de les faire en dehors de MT (après tout, C est 17 fois plus rapide que MQL4). Je ne sais pas si Matcad peut générer du code C, mais ce serait pratique. Le résultat sera écrit dans un fichier et lu par l'Expert Advisor. Ce fichier peut être une sorte d'instruction étape par étape pour l'Expert Advisor (en général, le transfert de données vers MT ne m'a pas beaucoup intéressé jusqu'à présent, peut-être y a-t-il d'autres moyens). Après avoir écrit l'"instruction" pour un certain intervalle historique, vous pouvez utiliser le testeur. Mais le testeur supportera-t-il Expert Advisor+Expert ou Expert Advisor+Script ? Je soupçonne qu'il n'en sera rien.
 
D'ailleurs, d'après ce que j'ai compris, les calculs ne sont pas interrompus maintenant. Il est effectué sur les valeurs des données au début du calcul, après quoi le terminal passe aux nouvelles données.
 
à Candid

2 grasn:
Pourtant, votre temps de calcul est trop long. Je pense que dans cette situation, il serait préférable de les faire en dehors de MT (après tout, C est 17 fois plus rapide que MQL4). Je ne sais pas si Matcad peut générer du code C, mais ce serait utile. Le résultat sera écrit dans un fichier et lu par l'Expert Advisor. Ce fichier peut être une sorte d'instruction étape par étape pour l'Expert Advisor (en général, le transfert de données vers MT ne m'a pas beaucoup intéressé jusqu'à présent, peut-être y a-t-il d'autres moyens). Après avoir écrit l'"instruction" pour un certain intervalle d'histoire, vous pouvez utiliser le testeur. Mais le testeur supportera-t-il Expert Advisor+Expert ou Expert Advisor+Script ? Je soupçonne qu'il n'en sera rien.


C'est vrai, le temps de calcul est assez long, je vais m'en occuper. MathCAD ne peut pas générer de code C, mais MathLab peut le faire (s'ils ne mentent pas bien sûr :o) Les tests dans MT sont nécessaires pour obtenir des résultats plus ou moins fondés du point de vue du commerce (et non des tests de prévisions multiples dans MathCAD, bien que positifs). Après avoir testé dans MT, je réfléchirai à ce qu'il faut faire ensuite, y compris déplacer les calculs vers un serveur séparé, à propos de ce que j'ai écrit auparavant. Mais c'est comme les alpinistes, plus il y a de nœuds sur la corde, plus c'est mauvais.
Raison: