Y a-t-il un modèle dans ce chaos ? Essayons de le trouver ! Apprentissage automatique sur l'exemple d'un échantillon spécifique. - page 5

 
elibrarius #:
Nous avons besoin d'un résultat financier précis, exempt d'erreurs. Sans elles, la ligne d'équilibre n'est pas fiable.
Rés. fin. si nous choisissons 0 (vous ne pouvez pas l'inclure, ce sera toujours 0), si 1, si -1. Toujours, même si vous marquez la classe 0, ne négociez pas. Le modèle sera erroné et il est nécessaire de connaître le prix de l'erreur.

Ce n'est pas le modèle qui détermine la direction de l'entrée, donc s'il y a une erreur avec la direction, il n'y aura pas d'entrée et donc pas de perte.

 
Aleksey Vyazmikin #:

Ce n'est pas le modèle qui détermine la direction de l'entrée, donc s'il y a une erreur dans la direction, il n'y aura pas d'entrée et donc pas de perte.

J'ai parlé de la classe 0, qui sera parfois prédite 1 ou -1. Vous avez écrit que le résultat financier est inconnu.

 
Aleksey Vyazmikin #:

Ce n'est pas le modèle qui détermine la direction de l'entrée

Si ce n'est pas le modèle qui le détermine, il n'est pas nécessaire de l'enseigner.

 
elibrarius #:

J'ai écrit à propos de la classe 0, qui sera parfois prédite comme étant 1 ou -1. Vous avez écrit à propos de lui que le résultat financier est inconnu.

Il suffit de ne pas abandonner la direction.

Si la classe est zéro et que la direction est +1 et qu'elle a été classée comme 1, il y aura une perte - prenez n'importe quelle colonne avec le résultat financier modulo.

Si la classe est zéro et que la direction est +1, mais qu'elle a été classée -1, il n'y aura pas d'entrée et pas de perte.

Si la classe est zéro et que la direction est -1, et qu'elle a été classée comme -1, il y aura une perte - prenez n'importe quelle colonne avec le résultat financier modulo.

Si la classe est zéro et que la direction est -1 et qu'elle a été classée comme 1, il n'y aura pas d'entrée, il n'y aura pas de perte.

elibrarius #:

Si ce n'est pas le modèle qui le détermine, il n'y a aucune raison de l'enseigner.

La logique ici est simple - un certain nombre de prédicteurs, ou même leurs valeurs, gravitent davantage vers une direction particulière du mouvement des prix. Lorsque nous enseignons tout ensemble par les classes 1 et 0, nous sélectionnons essentiellement les prédicteurs qui déterminent un fort mouvement dans l'une des directions - et ils ne sont généralement pas nombreux, mais si nous donnons à chaque direction sa propre classe, certaines contradictions statistiques disparaîtront et le modèle peut déjà inclure des indicateurs d'un prédicteur à différentes extrémités de sa valeur, par exemple le RSI 70/30 peut facilement se séparer.

En théorie, la classe zéro est plate, elle devrait donc être suffisamment similaire pour chaque direction. Encore une fois, j'ai divisé l'échantillon en deux parties à la fois - par direction d'entrée et cela a amélioré les résultats de l'apprentissage - c'est-à-dire qu'un pourcentage plus élevé de modèles a satisfait au critère du seuil de profit.

 
Aleksey Vyazmikin #:

Si la classe est zéro et que la direction est +1 et qu'elle a été classée comme -1, il n'y aura pas d'entrée, pas de perte.

Le professeur ne peut pas entrer sur le marché. Mais le modèle commettra une erreur et entrera sur le marché. Le modèle n'a pas été informé par le professeur de l'existence de 0 et de +1, il a reçu la prévision de -1 et négociera.

 
elibrarius #:

L'enseignant pourrait ne pas entrer sur le marché. Mais le modèle fera une erreur et entrera sur le marché. Ou bien avez-vous un opérateur conditionnel qui interdit au modèle d'effectuer les opérations qu'il a prévues ? Je crains de ne pas avoir d'endroit où placer un tel opérateur pour construire un équilibre.

Pour l'instant, il n'y a pas d'opérateur, mais il y a des données pour cela et elles sont écrites dans la colonne "Target_P" - donc tout peut fonctionner assez bien.

Voici un exemple de la logique de code que j'ai esquissée pour construire la balance

int Prognoz=0;//Сюда запишем прогноз
int Target_100[];//Фактическая целевая
int Target_P[];//Тип сделки - покупка/продажа
double Target_100_Buy[];//Финансовый результат от покупки
double Target_100_Sell[];//Финансовый результат от продажи
double Fin_Rez[];//Финансовый результат
int Strok_Total=0;//Всего строк
int Index_Fin_Rez=1;//Считаем число классифицированных 1 и -1 - это размер массива баланса и индекс массива Fin_Rez
ArrayResize(Target_100,Strok_Total);
ArrayResize(Target_P,Strok_Total);
ArrayResize(Target_100_Buy,Strok_Total);
ArrayResize(Target_100_Sell,Strok_Total);
ArrayResize(Fin_Rez,Strok_Total);
ArrayInitialize(Fin_Rez,0);
/*
Прочли данные файла в массивы - не знаю как реализовано у Вас
*/
for(int i=0; i<Strok_Total; i++)
{
/*
Сделали прогноз
*/
   if(Prognoz==-1 && Target_P[i]==-1)
   {
      Fin_Rez[Index_Fin_Rez]=Fin_Rez[Index_Fin_Rez-1]+Target_100_Sell[i];
      Index_Fin_Rez++;
   }
   if(Prognoz==1 && Target_P[i]==1)
   {
      Fin_Rez[Index_Fin_Rez]=Fin_Rez[Index_Fin_Rez-1]+Target_100_Buy[i];
      Index_Fin_Rez++;
   }
}
ArrayResize(Fin_Rez,Index_Fin_Rez);
 
Aleksey Vyazmikin #:

Pour l'instant, il n'y a pas d'opérateur, mais il y a des données pour lui et elles sont écrites dans la colonne "Target_P" - tout peut donc très bien fonctionner.

Voici un exemple du code logique que j'ai esquissé pour construire la balance

Le modèle ne doit effectuer des transactions qu'en fonction des prévisions. Si vous calculez le résultat à l'aide de l'enseignant, cela revient à jeter un coup d'œil dans l'avenir. La négociation doit se faire uniquement sur la base des prévisions. Vous n'aurez pas de Target_100_Sell dans le futur réel.

Le modèle ne connaît pas le 0 et le +1 du professeur, il a obtenu la prévision -1 et va négocier. Il suffit de connaître le résultat financier de chaque variante de prévision.

 
elibrarius #:

Le modèle ne doit effectuer des transactions qu'en fonction des prévisions. Si vous calculez le résultat à l'aide de l'enseignant, cela revient à jeter un coup d'œil dans l'avenir. Les transactions ne doivent être effectuées qu'en fonction des prévisions.

Le modèle ne connaît pas les valeurs 0 et +1 du professeur, il a obtenu la prévision -1 et effectuera des transactions. Il vous suffit de connaître le résultat financier de chaque variante de prévision.

Quel est le rapport avec le "peeking" ? Nous modifions l'objectif pour améliorer l'apprentissage, pas pour changer la logique de l'EA. La logique est que nous connaissons la direction d'entrée sans le modèle, et que le modèle devrait nous dire si nous devons entrer ou non.

 
Aleksey Vyazmikin #:

et le modèle devrait vous indiquer s'il faut y aller ou non.

Nous l'avons déjà vérifié.

 
elibrarius #:

Nous avons déjà vérifié ce point.

Nous avons des points d'entrée - des lignes d'échantillonnage - et nous avons un résultat financier défini par des points de sortie, à savoir les endroits où un stop loss ou un autre signal est défini. Vous voulez entrer sur le marché contrairement à la stratégie, c'est-à-dire acheter là où vous devriez vendre, si le modèle le dit, et pour cela vous devez définir de nouveaux points de sortie. La question qui se pose est la suivante : si le point de sortie n'est pas encore apparu, mais que le point d'entrée est apparu, que devez-vous faire : fermer et demander au modèle la direction d'entrée, ou quoi ?