[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 521
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Comment pourrais-je le vérifier ?
Merci.
Est-il possible de faire fonctionner le paramètre MaxEquity par exemple 500 fois sans redémarrer l'EA ?
Par exemple, si j'écris 500 dans le compteur, voici ce qu'il en est : Supposons que le capital initial soit de 10 000,
Après avoir ajouté à l'équité initiale de 10 000 (en le spécifiant dans les paramètres) - les grosses pertes seront fermées.
Il sera fait 500 fois (par exemple) (il est de toute façon impossible de multiplier 500 fois le capital initial).
C'est la différence qui se produira avec votre version - qu'après des incréments de 10 000 à l'équité initiale = 10 000 -.
L'EA n'a pas besoin d'être redémarré, et le cycle se poursuivra - à 20 000 plus 10 000 seront ajoutés, à 30 000 + 10 000 et ainsi de suite 500 fois ( par exemple ). Bien
et après chaque incrément = 10 000, l'ordre perdant avec le plus grand moins (ou plusieurs ordres - à spécifier dans les paramètres) sera fermé ?
Merci.
Est-il possible de faire fonctionner le paramètre MaxEquity par exemple 500 fois sans redémarrer l'EA ?
Par exemple, si j'écris 500 dans le compteur, que cela fonctionne comme suit : Supposons que le capital initial soit de 10 000,
Après avoir ajouté au capital initial de 10 000 (en le spécifiant dans les paramètres), les gros inconvénients se referment.
De la même manière, disons 500 fois (par exemple) (après tout, il est impossible de multiplier 500 fois le capital initial).
En d'autres termes, la différence apparaîtra dans votre version : après avoir ajouté 10 000 à l'avoir initial = 10 000.
Le conseiller expert n'a pas besoin d'être redémarré, et le cycle se poursuivra - à 20 000 seront ajoutés 10 000, à 30 000 + 10 000 et ainsi de suite (par exemple) 500 fois. Par exemple :
Et, après chaque incrément égal à 10 000, l'ordre perdant avec la plus grande perte sera fermé (ou plusieurs ordres perdants selon les paramètres) ?
Il n'est pas nécessaire de procéder à des redémarrages. Vous devez mettre à jour les données de l'équité initiale après avoir fermé les positions et attendre que l'équité augmente à partir de la nouvelle équité initiale.
Mais d'après ce que je comprends, tout est fait en code de programmation. Je n'ai pas le pouvoir de programmation).
Naturellement. Il n'existe qu'une seule fonction qui surveille en permanence l'équité et envoie une commande pour fermer les positions non rentables si la valeur spécifiée est dépassée. Ensuite, une fois que toutes les positions ont été clôturées avec succès, il faut enregistrer le nouveau statut d'équité et continuer à le surveiller.
Pouvez-vous me dire quel est le problème ?
Je suppose que ma question ne contient pas assez d'informations pour m'aider). Je vais compléter ma question. Je fournis ci-dessous une structure avec les principales fonctions de mon Expert Advisor. Peut-être que cela m'aidera à comprendre quel est le problème que j'ai mis en évidence.
Actuellement, je dois recompiler l'EA à chaque fois après avoir activé/désactivé la fonction de gestion de l'argent dans les paramètres de l'EA, pour que le rapport soit généré correctement.
P.S. Peut-être que cela a quelque chose à voir avec la variable globale du terminal fxprop_lot?
Je suppose qu'il n'y a pas assez d'informations dans ma question pour m'aider). Je vais compléter ma question. Je vous présente ci-dessous la structure des fonctions de base de mon EA. Peut-être que de cette façon, il sera possible d'identifier le problème que j'ai mis en évidence.
Actuellement, je dois recompiler l'EA à chaque fois après avoir activé/désactivé la fonction de gestion de l'argent dans les paramètres de l'EA pour que le rapport soit généré correctement.
P.S. Peut-être que cela a quelque chose à voir avec la variable globale terminalfxprop_lot?
Si vous pensez que c'est suffisant, je suppose que ça l'est. Je dois juste attendre une réponse. Je n'en ai pas.
Si vous pensez que c'est suffisant, je suppose que oui. J'attends une réponse. Je n'en ai pas.
Et dans le prochain post, la fonction de génération de rapports...L'expérience que j'ai acquise jusqu'à présent ne me permet malheureusement pas de juger si les informations fournies sont suffisantes ou non pour traiter une question particulière. Je ne le fais pas exprès et je m'excuse si c'est le cas). Le fait est que, à mon avis, le point clé du problème que j'ai mis en évidence est que tout fonctionne correctement lors de la recompilation de l'Expert Advisor. Mais cela est encore dû à mon expérience immature. Veuillez indiquer quelles informations doivent être fournies pour résoudre ce problème. La fonction de gestion des fonds ou la fonction de génération de rapports apparaît évidemment dans le problème. C'est pourquoi je vais vous donner la fonction de gestion de l'argent :
void Short_Trade_Report(int Mgc_Src_LP_TS№1,int Mgc_LP01_TS№1,int Mgc_LP02_TS№1,int Mgc_LP03_TS№1,int Mgc_LP04_TS№1,int Mgc_LP05_TS№1,int Mgc_LP06_TS№1, int Mgc_Src_SP_TS№1,int Mgc_SP01_TS№1,int Mgc_SP02_TS№1,int Mgc_SP03_TS№1,int Mgc_SP04_TS№1,int Mgc_SP05_TS№1,int Mgc_SP06_TS№1, int Mgc_Src_LP_TS№2,int Mgc_LP01_TS№2,int Mgc_LP02_TS№2,int Mgc_LP03_TS№2,int Mgc_LP04_TS№2,int Mgc_LP05_TS№2,int Mgc_LP06_TS№2, int Mgc_Src_SP_TS№2,int Mgc_SP01_TS№2,int Mgc_SP02_TS№2,int Mgc_SP03_TS№2,int Mgc_SP04_TS№2,int Mgc_SP05_TS№2,int Mgc_SP06_TS№2, int Mgc_Src_LP_TS№3,int Mgc_LP01_TS№3,int Mgc_LP02_TS№3,int Mgc_LP03_TS№3,int Mgc_LP04_TS№3,int Mgc_LP05_TS№3,int Mgc_LP06_TS№3, int Mgc_Src_SP_TS№3,int Mgc_SP01_TS№3,int Mgc_SP02_TS№3,int Mgc_SP03_TS№3,int Mgc_SP04_TS№3,int Mgc_SP05_TS№3,int Mgc_SP06_TS№3) { #define RA 10000 // Range Array - Размер массива для отчёта double Acc_Bal_Close[RA]; // Массив для баланса на закрытии сделки(-ок) double Acc_Bal_Open[RA]; // Массив для баланса на открытии сделки(-ок) double Price_Open_Pos[RA]; double Price_Stop_Loss[RA]; double TS№1_DS[RA], TS№2_TA[RA], TS№3_SBH[RA]; int pos, handle, dgt, Magic, sign, index; double Swap_P; double Profit_P; double Commission; double Open_Price; double Stop_Loss; string Type_Pos; string comment; string Str_Stop_Loss; //--- ПРОВЕРКА НА КОЛ-ВО ЗНАКОВ В СИМВОЛЕ ДЛЯ РАСЧЁТА ОТСТУПА В СТРОКАХ КОММЕНТАРИЕВ --------------------------------// int digit_string; int digit = MarketInfo(Symbol(),MODE_DIGITS); switch(digit) { case 2 : digit_string = 4; dgt = 100; break; case 3 : digit_string = 5; dgt = 100; break; case 4 : digit_string = 6; dgt = 10000; break; case 5 : digit_string = 7; dgt = 10000; break; default: Print("Неизвестный символ! Количество знаков = ",digit); return(0); } handle = FileOpen("ShortReport.csv",FILE_CSV|FILE_WRITE); if(handle > 0) //1 { FileWrite(handle,"Time Close"+","+"Symbol"+","+"Type"+","+"Lots"+","+"Balance($)"+","+"Stop Loss(p)"+","+"Profit(p)"+","+"TS#1_DS(p)"+","+"TS#2_TA(p)"+","+"TS#3_SBH(p)"); for(pos = 0; pos < OrdersHistoryTotal(); pos++) // 2 { OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); Commission = OrderCommission(); Swap_P = (OrderSwap()/10)/OrderLots(); Profit_P = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots(); Open_Price = NormalizeDouble(OrderOpenPrice(),Digits); index = StringFind(OrderComment(),"[sl]",0); if(index != -1) { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())-4); } else { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№1 || OrderMagicNumber() == Mgc_Src_SP_TS№1 || OrderMagicNumber() == Mgc_LP01_TS№1 || OrderMagicNumber() == Mgc_LP02_TS№1 || OrderMagicNumber() == Mgc_LP03_TS№1 || OrderMagicNumber() == Mgc_LP04_TS№1 || OrderMagicNumber() == Mgc_LP05_TS№1 || OrderMagicNumber() == Mgc_LP06_TS№1 || OrderMagicNumber() == Mgc_SP01_TS№1 || OrderMagicNumber() == Mgc_SP02_TS№1 || OrderMagicNumber() == Mgc_SP03_TS№1 || OrderMagicNumber() == Mgc_SP04_TS№1 || OrderMagicNumber() == Mgc_SP05_TS№1 || OrderMagicNumber() == Mgc_SP06_TS№1)) { TS№1_DS[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№2 || OrderMagicNumber() == Mgc_Src_SP_TS№2 || OrderMagicNumber() == Mgc_LP01_TS№2 || OrderMagicNumber() == Mgc_LP02_TS№2 || OrderMagicNumber() == Mgc_LP03_TS№2 || OrderMagicNumber() == Mgc_LP04_TS№2 || OrderMagicNumber() == Mgc_LP05_TS№2 || OrderMagicNumber() == Mgc_LP06_TS№2 || OrderMagicNumber() == Mgc_SP01_TS№2 || OrderMagicNumber() == Mgc_SP02_TS№2 || OrderMagicNumber() == Mgc_SP03_TS№2 || OrderMagicNumber() == Mgc_SP04_TS№2 || OrderMagicNumber() == Mgc_SP05_TS№2 || OrderMagicNumber() == Mgc_SP06_TS№2)) { TS№2_TA[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№3 || OrderMagicNumber() == Mgc_Src_SP_TS№3 || OrderMagicNumber() == Mgc_LP01_TS№3 || OrderMagicNumber() == Mgc_LP02_TS№3 || OrderMagicNumber() == Mgc_LP03_TS№3 || OrderMagicNumber() == Mgc_LP04_TS№3 || OrderMagicNumber() == Mgc_LP05_TS№3 || OrderMagicNumber() == Mgc_LP06_TS№3 || OrderMagicNumber() == Mgc_SP01_TS№3 || OrderMagicNumber() == Mgc_SP02_TS№3 || OrderMagicNumber() == Mgc_SP03_TS№3 || OrderMagicNumber() == Mgc_SP04_TS№3 || OrderMagicNumber() == Mgc_SP05_TS№3 || OrderMagicNumber() == Mgc_SP06_TS№3)) { TS№3_SBH[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() == OP_BUY) { Type_Pos = "buy"; } if(OrderType() == OP_SELL) { Type_Pos = "sell"; } if(OrderType() < 2) { FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+Symbol()+","+Type_Pos+"," +DoubleToStr(OrderLots(),2)+","+DoubleToStr(Acc_Bal_Close[pos],2)+","+DoubleToStr(Price_Stop_Loss[pos],2)+"," +DoubleToStr(Profit_P+Swap_P+Commission,2)+","+DoubleToStr(TS№1_DS[pos],2)+","+DoubleToStr(TS№2_TA[pos],2)+","+DoubleToStr(TS№3_SBH[pos],2)); } } FileClose(handle); // 2\ } //1 }
Veuillez nous aider à résoudre ce problème.J'ai essayé d'appeler la fonction de gestion du capital pendant l'initialisation :
Mais cela ne résout pas le problème...