[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 521
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Come potrei controllarlo?
Grazie.
È possibile far funzionare l'impostazione MaxEquity per esempio 500 volte senza riavviare l'EA?
Per esempio, se scrivo 500 nel contatore, facciamo così: supponiamo che il capitale iniziale sia 10 000,
Dopo aver aggiunto al capitale iniziale di 10.000 (specificando nelle impostazioni), i grandi inconvenienti si chiuderanno.
Sarà fatto 500 volte (per esempio) (è ancora impossibile moltiplicare il capitale iniziale 500 volte).
Questa è la differenza si rivelerà con la vostra versione - che dopo incrementi di 10 000 al capitale iniziale = 10 000 -
L'EA non ha bisogno di essere riavviato, e il ciclo continuerà - a 20 000 saranno aggiunti altri 10 000, a 30 000 + 10 000 e così via per 500 volte (per esempio). Bene
e dopo ogni incremento = 10 000, l'ordine perdente con il maggior minus (o più ordini - da specificare nelle impostazioni) sarà chiuso ?
Grazie.
È possibile far funzionare l'impostazione MaxEquity per esempio 500 volte senza riavviare l'EA?
Per esempio, se scrivo 500 nel contatore, facciamo così: supponiamo che il capitale iniziale sia 10 000,
Dopo aver aggiunto al capitale iniziale di 10.000 (specificando nelle impostazioni), i grandi inconvenienti si chiuderanno.
Allo stesso modo, diciamo 500 volte (per esempio) (dopo tutto, è impossibile moltiplicare il capitale iniziale 500 volte).
In altre parole, la differenza apparirà nella vostra versione: dopo aver aggiunto 10 000 al capitale iniziale = 10 000.
L'Expert Advisor non ha bisogno di essere riavviato, e il ciclo continuerà - a 20 000 sarà aggiunto 10 000, a 30 000 + 10 000 e così via (per esempio) 500 volte. Per esempio:
E, dopo ogni incremento pari a 10 000, l'ordine perdente con la perdita maggiore sarà chiuso (o diversi ordini perdenti secondo le impostazioni) ?
Non c'è bisogno di fare alcun riavvio. È necessario aggiornare i dati del capitale iniziale dopo aver chiuso le posizioni e aspettare che il capitale aumenti dal nuovo capitale iniziale.
Ma da quanto ho capito, è tutto fatto nel codice di programmazione. Non ho il potere di programmare).
Naturalmente. C'è solo una funzione che monitorerà continuamente l'equity e invierà un comando per chiudere le posizioni non redditizie se il valore specificato viene superato. Poi, dopo che tutte le posizioni sono state chiuse con successo, si deve registrare il nuovo stato patrimoniale e continuare a monitorarlo.
Puoi dirmi quale potrebbe essere il problema?
Suppongo che la mia domanda non contenga abbastanza informazioni per aiutarmi). Completerò la mia domanda. Di seguito fornisco una struttura con le funzioni principali del mio Expert Advisor. Forse questo mi aiuterà a capire qual è il problema che ho evidenziato.
Al momento devo ricompilare l'EA ogni volta dopo aver abilitato/disabilitato la funzione di gestione del denaro nei parametri EA, affinché il report venga generato correttamente.
P.S. Forse ha qualcosa a che fare con la variabile globale terminale fxprop_lot?
Presumo che non ci siano abbastanza informazioni nella mia domanda per aiutarmi). Integrerò la mia domanda. Di seguito sto fornendo la struttura con le funzioni di base del mio EA. Forse in questo modo sarà possibile identificare il problema che ho evidenziato.
Al momento devo ricompilare l'EA ogni volta dopo aver abilitato/disabilitato la funzione di gestione del denaro nei parametri EA perché il report venga generato correttamente.
P.S. Forse ha qualcosa a che fare con la variabile globale terminalefxprop_lot?
Se pensate che sia sufficiente, credo che lo sia. Devo solo aspettare una risposta. Non ne ho uno.
Se pensate che questo sia sufficiente, credo di sì. Sto aspettando una risposta. Non ne ho uno.
E nel prossimo post la funzione di generazione di rapporti...La mia esperienza finora purtroppo non mi permette di giudicare se le informazioni fornite sono sufficienti o meno per affrontare una particolare questione. Non lo faccio apposta e mi scuso se lo fai). Il fatto è che, secondo me, il punto chiave del problema che ho evidenziato è che tutto funziona correttamente quando si ricompila l'Expert Advisor. Ma anche questo è dovuto alla mia esperienza immatura. Si prega di indicare quali informazioni devono essere fornite per risolvere questo problema. La funzione di gestione del denaro o di generazione di rapporti appare ovviamente nel problema. Ecco perché vi darò la funzione di gestione del denaro:
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 }
Per favore, aiutatemi a risolvere il problema.Ho provato a chiamare la funzione di gestione del capitale durante l'inizializzazione:
Ma questo non risolve il problema...