Algorithmes, méthodes de résolution, comparaison de leurs performances - page 13

 
Реter Konow:

2. l'intégration dans l'EA est le point clé. Si la solution est super confuse (je suis sûr que vous ne pouvez même pas expliquer comment fonctionne la solution de Sergey Dzyublik), quelle est sa valeur pratique pour le trader? Vous ne pouvez pas construire un EA normal à partir de solutions super alambiquées.

La solution proposée a été exprimée immédiatement

Mais quelqu'un n'a même pas demandé ce que c'était. La mise en œuvre aurait pu être beaucoup plus "claire". Mais cela ne changerait pas la base de l'idée.

 
Реter Konow:

1. En termes de pratique, ce sont des mots vides avec lesquels vous combattez les faits. J'ai montré la mesure du temps pour trouver le magicien. J'ai démontré la commodité de l'intégration de la solution dans l'EA. Tout ce que vous démontrez, c'est la diffamation de ma solution. Rien d'autre.

2. l'intégration dans l'EA est le point clé. Si la solution est super alambiquée (je suis sûr que vous ne pouvez même pas expliquer comment fonctionne la solution de Sergey Dzyublik), quelle est sa valeur pratique pour le trader? Vous ne pouvez pas construire un EA normal à partir de solutions super alambiquées.

Je ne juge pas la solution de Sergey Dzyublik. Il ne l'a pas encore expliqué. Quand il l'expliquera, on comprendra qui a "commencé ce gâchis".


Ici, je voulais vous répondre, mais le modérateur vous a devancé et a dit la même chose. Je vais donc vous montrer à nouveau ce qu'il a dit :

Artyom Trishkin:

Non. Je ne vous propose pas le style de solution de quelqu'un d'autre. Écrivez dans votre propre style - personne n'impose rien à personne.

Mais je suggère qu'avec la persistance qui vous caractérise, vous résolvez les problèmes de la meilleure façon possible au départ. Qu'est-ce que tu fais ?

1. Vous choisissez initialement la solution la plus sous-optimale parmi toutes les solutions possibles et vous commencez à jouer avec. Pour cette tâche, même au stade de la réflexion sur une solution, vous deviez non seulement rejeter votre version, mais même ne pas penser dans cette direction. Et ce n'est pas à cela que servent les fonctions de traitement du texte.

2. Concernant l'intégration dans le conseiller expert et les avantages de la solution proposée - laissez celui qui l'a proposée vous répondre.


P.S. Vous devez être un très mauvais élève :)

 
Реter Konow:

Je réalise mes erreurs dès que j'en suis convaincu. Jusqu'à présent, personne n'a été en mesure de prouver que ma décision était erronée. Nous attendrons.

Vous êtes un piètre apprenant !

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Algorithmes, méthodes de résolution, comparaison des performances

Sergey Dzyublik, 2017.12.10 20:58


1. Votre code ne fonctionne pas.
Modèle incorrect "_index_magic". Solution possible "|index_magic".


Après l'addition nous avons _1_3_2_4_3_5_4_6_
Veuillez trouver le 3ème de la liste.
Vous obtiendrez un résultat de 2.

string All_magics = "_1_3_2_4_3_5_4_6_";

int Get_magic(int deal_number)
{
 int stringlen = StringLen((string)deal_number); //добавлено
 //--------------------------------------------
 //Получаем начало строки магика.
 //--------------------------------------------
 int Magic_position_start =  StringFind(All_magics,"_" + (string)deal_number + "_",0) + stringlen + 2;
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 int Magic_position_end   =  StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0);
 //--------------------------------------------
 //Получаем количество цифр из которых состоит магик.
 //--------------------------------------------
 int Magic_lenght         =  Magic_position_end - Magic_position_start;
 //--------------------------------------------
 //Извлекаем магик из общей строки.
 //--------------------------------------------
 string Magic             =  StringSubstr(All_magics,Magic_position_start,Magic_lenght);
 //--------------------------------------------
 //Возвращаем цифровое значение магика.
 //--------------------------------------------
 return((int)Magic);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  Print(All_magics);
  Print(Get_magic(3));   
}


Résultat

_1_3_2_4_3_5_4_6_
2
 
Artyom Trishkin:

Jusqu'à présent, je ne vois ici qu'une moquerie à l'égard d'un homme qui a eu le courage de poster sa solution ici.

Clairement, c'est... pour ne pas dire plus, ce n'est pas du tout de la camelote. Mais il l'a fait. Les autres n'ont jusqu'à présent que le courage de rire et de montrer du doigt.

Artem, il m'a fallu 40 minutes de mon temps et quelques millions de cellules nerveuses pour expliquer à l'homme que la sous-chaîne..._25_... quatre caractères, pas trois. Eh bien, combien d'années-hommes pensez-vous qu'il nous faudra à tous pour lui expliquer quelque chose de plus valable et puissant sur le plan conceptuel ? Je pense beaucoup, beaucoup d'années-hommes. C'est pourquoi personne n'essaie même d'expliquer et de mâcher quelque chose. Il y a simplement un certain niveau minimum en dessous duquel celui qui explique ne peut pas descendre, et le niveau de Pierre est en dessous de cette barre.

 
fxsaber:



Résultat

J'ai déjà dit que le numéro du magicien est déterminé par l'utilisateur. Afin d'éviter les collisions au sein d'une chaîne, vous devez allouer une certaine plage numérique aux magiciens. Par exemple, de 100 000 à 999 000. Alors il n'y aura pas de problème.

Cela dit, nous pouvons, bien sûr, affiner la solution. Il ne s'agit que d'un "prototype". Une version de démonstration.

 
Vasiliy Sokolov:

Artem, il m'a fallu 40 minutes de mon temps et quelques millions de cellules nerveuses pour expliquer à l'homme que la sous-chaîne..._25_... quatre caractères, pas trois. Eh bien, combien d'années-hommes pensez-vous qu'il nous faudra à tous pour lui expliquer quelque chose de plus valable et puissant sur le plan conceptuel ? Je pense beaucoup, beaucoup d'années-hommes. C'est pourquoi personne n'essaie même d'expliquer et de mâcher quelque chose. Il y a simplement un certain niveau minimum en dessous duquel celui qui explique ne peut pas descendre, et le niveau de Pierre est en dessous de cette barre.

Vasily, j'ai tout compris dès que tu l'as dit. Merci d'avoir trouvé cette erreur.

 
fxsaber:

Va te faire foutre.

C'est parti...))

Et pourquoi cette réaction ?

 

Le conteneur standard de la bibliothèque - CArrayList - a été choisi pour résoudre cette tâche.
Presque tout le code est un wrapper afin de fournir une interface "pratique" pour les tests. Pour tous les goûts et toutes les couleurs, comme ils disent....

Pour tester votre solution, vous avez besoin :
1. Créez une classe qui hérite de ITestRandomAccessCollection et implémente les méthodes nécessaires. (similaire àTestRandomAccessCollectionCArrayList)
2. Les données d'un certain type sont utilisées pour les tests. Dans l'exemple, c'était int.
Nous devons nous assurer qu'il existe un générateur pour le type de données sélectionné et il est ajouté àCreateGenerator(similaire àIntGenerator).
3. Effectuez un test sur les mêmes données pour plusieurs solutions et comparez les résultats (si vous le souhaitez, vous pouvez aussi faire un cycle pour obtenir la moyenne) :

{
     printf ("TestRandomAccessCollectionAfterAdding: Started.", result);
     TestRandomAccessCollectionCArrayList<int> testCollection();
     result = TestRandomAccessCollectionAfterAdding(testCollection, 10000, 1);
     printf ("TestRandomAccessCollectionAfterAdding: Fineshed. Total result: %I64i\n", result);
}


Il s'agit actuellement de la fonction à tester, de nouvelles fonctions peuvent être ajoutées par analogie :

template<typename T>
ulong TestRandomAccessCollectionAfterAdding(ITestRandomAccessCollection<T> &testCollection, const int iterationCount = 1000, int srandValue = 0)

Paramètres :

testCollection - conteneur de test implémentantITestRandomAccessCollection<T> ;
iterationCount - nombre de cycles d'itération dans le test ;
srandValue - influence sur l'échantillonnage du générateur si 0 est un échantillonnage aléatoire.

 
Реter Konow:
1. Combien de microsecondes en moyenne faut-il pour trouver le magicien dans votre solution ?

2. Dans quelle mesure est-il facile d'intégrer votre solution dans l'EE (selon vous) ?


1. cela n'a aucun sens. Les algorithmes dans leur ensemble sont comparés sur les résultats relatifs.
2. La solution est déjà intégrée - c'est une bibliothèque standard<Generic\ArrayList.mqh>.

 
Реter Konow:

Comme je l'ai déjà dit, le numéro du magicien est déterminé par l'utilisateur. Afin d'éviter les collisions au sein d'une chaîne, vous devez allouer une certaine plage numérique aux magiciens. Par exemple de 100.000 à 999.000. Alors il n'y aura pas de problème.

Cela dit, vous pouvez, bien sûr, affiner la solution. Ce n'est qu'un "prototype". Il s'agit d'une version de démonstration.


Ma chère, ce que vous voulez est une tâche enfantine. C'est le genre de problème que les écoliers résolvent.

Il en existe des dizaines sur l'internet. Et oubliez les données de la chaîne.

Raison: