par exemple, la chaîne
bool neutral = OrderClosePrice() == OrderOpenPrice();
nous devrions probablement façonner le fonctionnement des conditions algorithmiques comme ceci :
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
et les deux autres conditions dans la même veine
D'ailleurs, la dernière transaction dans l'histoire n'est pas toujours la dernière transaction dans le temps.
D'ailleurs, la dernière transaction dans l'histoire n'est pas toujours la dernière transaction dans le temps.
par exemple, la ligne
peut-être devrions-nous former le travail des conditions algorithmiques comme ceci :
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
et les deux autres conditions dans la même veine
mais quand même, je vais certainement vérifier et réécrire. Je vous ferai part du résultat.
Oui, j'ai supprimé l'échantillonnage du temps, mais cela ne fonctionne toujours pas... J'ai juste utilisé ce bloc avant dans d'autres systèmes et il a parfaitement fonctionné dans cette partie.
mais quand même, je vais certainement vérifier et réécrire. Je vous ferai part du résultat.
Ces variables sont-elles réinitialisées quelque part ?
ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса Minus++; //Подсчет отрицательных сделок Sdelok++; //Подсчет количества сделок
Peut-être qu'il faut passer de la première à la dernière.
Je vais retirer la collecte des statistiques de cette fonction pour l'instant, et le minus général et les statistiques dans une autre (la fonction séparée produira)
L'écriture par blocs.
Rassembler des statistiques et calculer les moins et les plus (les moins et les plus sont des variables globales).
if(OrderSelect((OrdersHistoryTotal() - 1), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { if(OrderTicket() != Tiket2) { bool profit1 = false; if(OrderClosePrice() > 0) { profit1 = true; } bool loss1 = false; if(OrderClosePrice() < 0) { loss1 = true; } SumPosOrder = OrderLots(); Tiket2 = OrderTicket(); Print(OrderCloseTime()); if(loss1) { ObchMin = ObchMin + SumPosOrder; Minus++; Sdelok++; } if(profit1) { ObchPlus = ObchPlus + (SumPosOrder * 0.8); } if(profit1 && ObchPlus < ObchMin) { Pobeda++; Sdelok++; } if(profit1 && ObchPlus > ObchMin) { ObchPlus = 0; ObchMin = 0; Pobeda++; Sdelok++; } }
Bloc 2 - sélection de la variable n pour le calcul (ou plutôt la sélection) du taux
int GetN() { int n = 0; for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true; } if(loss) { n++; } if(n >= MartinSteps) { n = 0; break; } if(profit && ObchPlus < ObchMin) { n++; } if(profit && ObchPlus > ObchMin) { n = 0; break; } } Print(n); return n; } double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; } //+------------------------------------------------------------------+
Ce serait probablement correct...
Je ne comprends pas la logique.
Comment cela ?
bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true;
Comment le prix de clôture de l'ordre peut-il être inférieur à zéro ?
L'ordre d'achat est rentable si le prix de clôture est supérieur au prix d'ouverture.
voici la condition d'un achat plus (hors commissions et swap) :
OrderClosePrice() > OrderOpenPrice()Si c'est l'inverse, c'est un moins.
L'ordre d'achat est rentable si le prix de clôture est supérieur au prix d'ouverture.
voici les conditions d'un achat plus (hors commissions et swap) :
Si c'est l'inverse, c'est un moins.Comme j'écris pour les options binaires, j'ai fait les choses un peu différemment :
if(OrderProfit() > 0)
Ce serait probablement correct ?
Peut-être qu'il faut passer de la première à la dernière.
Je vais retirer la collecte des statistiques de cette fonction pour le moment, et le total moins et les statistiques dans une autre (fonction séparée que je produirai)
Écriture par blocs
Moins et plus cumulés (moins et plus sont des variables globales)
Bloc 2 - sélection de la variable n pour le calcul (ou plutôt la sélection) du taux
Ce serait probablement correct...
Je ne veux pas interférer et je n'ai même pas regardé votre code et vos conseils...
double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; }
a attiré mon attention. A ce propos, une question : n'est-il pas plus simple et plus lisible d'utiliser l'opérateur de commutation
double SelectVolume(int n) { double Volume = 0.0; switch(n) { case 1 : Volume = Volume2; break; case 2 : Volume = Volume3; break; case 3 : Volume = Volume4; break; case 4 : Volume = Volume5; break; case 5 : Volume = Volume6; break; case 6 : Volume = Volume7; break; case 7 : Volume = Volume8; break; case 8 : Volume = Volume9; break; case 9 : Volume = Volume10; break; default : Volume = Volume1; break; } return(Volume); }Je pense que c'est plus facile à lire et à comprendre. Peut-être que ça marche aussi un peu plus vite.
Vous avez déjà reçu des conseils sur l'ensemble de l'algorithme, je ne veux pas interférer et je n'ai même pas regardé votre code et les mêmes conseils... Mais ceci
a attiré mon attention. A ce propos, une question : n'est-il pas plus simple et plus lisible d'utiliser l'opérateur de commutation
Je pense que c'est plus facile à lire et à comprendre. Peut-être que cela fonctionne aussi un peu plus vite.Au départ, je l'ai fait comme je l'ai trouvé, ça a marché, alors je n'ai pas pensé à l'améliorer.
Vous savez ce qu'on dit - ça marche - n'y touchez pas.
Mais maintenant, je vais certainement essayer d'appliquer cette méthode. Parce qu'il est nécessaire d'apprendre et de se développer.
Mais je ne m'occuperai que de ma variable n pour l'instant. Il ne veut pas être compté.
toujours n = 0 (jusqu'à présent)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Écriture du code
La tâche était à l'origine :
Trouver le dernier ordre clôturé.
Vérifiez si elle s'est fermée en position plus ou moins.
Comptez le nombre de transactions
Comptez le nombre de transactions positives et négatives.
Calculez le montant de la mise.
Si la transaction est profitable (et que le total des moins = 0), alors le pari numéro 1
Si la transaction est négative, alors comptez les moins et pariez le numéro 2
Si plus, mais moins > 0, alors le pari suivant.
Mais pour une raison quelconque, il ne compte pas correctement le nombre de paris et le montant du pari...