En tenant compte des critiques constructives, j'ai modifié le code de la fonction de vérification :
bool Check_Trading()
{
//--- проверка разрешения автоматической торговли на терминалеif(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Print("Ошибка разрешения автоматической торговли на терминале! ",GetLastError());
return(false);
}
//--- проверка разрешения автоматической торговли на стороне сервераif(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
{
Print("Ошибка разрешения автоматической торговли на стороне сервера! ",GetLastError());
return(false);
}
//--- проверка синхронизированности данных по текущему символу между терминалом и серверомif(!SymbolIsSynchronized(_Symbol))
{
Print("Ошибка синхронизированности данных по текущему символу! ",GetLastError());
return(false);
}
//--- проверка достаточности средств для торговлиif(!CheckMoneyForTrade(_Symbol,GetLot(),ORDER_TYPE_SELL))
{
Print("Ошибка проверки достаточности средств для торговли! ",GetLastError());
return(false);
}
//--- проверки корректности объёма сделкиstring descript;
if(!CheckVolumeValue(GetLot(),descript))
{
Print("Ошибка проверки корректности объёма сделки! ",GetLastError());
return(false);
}
//--- проверка прошла успешноreturn(true);
}
Les fonctions CheckMoneyForTrade() et CheckVolumeValue() ne sont pas postées, car elles sont librement disponibles et reprises ici.
Oui, cela semble normal, mais il est préférable de vérifier le volume et la suffisance dans une seule fonction et de changer la logique sur la suffisance. Nous vérifions si le lot de marge est plus grand ou plus petit, mais nous ne le réduisons pas, si le lot demandé est plus petit, je calcule également le lot par rapport à la marge disponible, quel lot peut être défini, et je le compare avec le lot minimum, et s'il est plus petit, alors la transaction est définitivement terminée.
Bonjour à tous ! J'ai un indicateur Stochastique RSI. Le problème est qu'il fonctionne très lentement. D'après ce que j'ai compris, le principal "frein" crée cette section à cause de la grande période, qui est utilisée pour rechercher le minimum et le maximum dans les tableaux :
Idéalement, la solution pourrait être que l'indicateur passe en revue toutes les barres de l'historique lors de la première exécution, et ne mette à jour que la dernière barre lors des suivantes. Mais je ne comprends pas comment faire. Est-il possible de faire cela ? Si oui, je vous serais reconnaissant de partager un lien ou un conseil sur la façon de le faire.
Voici le code complet de l'indicateur :
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{ // OnCalculateArraySetAsSeries(time,true);
if( t != time[0]) { // контроль бара
t = time[0];
ArrayInitialize(Buffer_Step1_RSI,0);
CopyBuffer(RSI_Handle,0,0,rates_total,Buffer_Step1_RSI);
double lRsi, lLowestRsi, lHighestRsi;
int ZZZ = rates_total - MathMax(MathMax(RsiLength,StochLength),MathMax(SmoothK,SmoothD)) - 1;
for (int i = ZZZ; i >= 0; i-- ) { // Цикл расчета индикатора // ====== Calulate Stochastic of RSI ======
lRsi = Buffer_Step1_RSI[i];
lLowestRsi = Buffer_Step1_RSI[ArrayMinimum(Buffer_Step1_RSI,i,StochLength)];
lHighestRsi = Buffer_Step1_RSI[ArrayMaximum(Buffer_Step1_RSI,i,StochLength)];
Buffer_Step2_Calculate[i] = ( (lRsi-lLowestRsi) / (lHighestRsi-lLowestRsi) ) * 100;
// ====== Рассчитываем само значение предварительное (МА1) ======// Расчет для всех циклов, кроме первого (МА1)
Step3_MA_Sum = Step3_MA_Sum - Buffer_Step2_Calculate[i + SmoothK + 1] + Buffer_Step2_Calculate[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА1)if (i == ZZZ) {
Step3_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothK + 1; kk++) Step3_MA_Sum = Step3_MA_Sum + Buffer_Step2_Calculate[kk];
}
Buffer_Step3_MA1[i] = Step3_MA_Sum / SmoothK;
// ====== Расчитываем само значение индикатора (МА2) ====== // Расчет для всех циклов, кроме первого (МА2)
Step4_MA_Sum = Step4_MA_Sum - Buffer_Step3_MA1[i + SmoothD+1] + Buffer_Step3_MA1[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА2) if (i == ZZZ) {
Step4_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothD + 1; kk++) Step4_MA_Sum = Step4_MA_Sum + Buffer_Step3_MA1[kk];
}
Buffer_Step4_MA2_IndicatorData[i] = Step4_MA_Sum / SmoothD;
FirstCycle = false;
} // Цикл расчета индикатора
} // контроль бараreturn(rates_total);
} // OnCalculate
Je pense que c'est bien, mais il est préférable de mettre la vérification du volume et de la suffisance dans une seule fonction et de changer la logique pour la suffisance également. Nous vérifions si le lot de marge est supérieur ou inférieur, mais nous ne le réduisons pas. Si le lot demandé est inférieur, je calcule également le lot par rapport à la marge disponible, quel lot peut être fixé, et je le compare avec le lot minimum, et s'il est inférieur, la transaction est définitivement terminée.
2023.02.0214:41:05.466 Experts automated trading is disabled because the account has been changed
2023.02.0214:41:09.990 Experts automated trading is enabled
2023.02.0214:42:43.410 Experts automated trading is disabled because the account has been changed
2023.02.0214:42:52.690 Experts automated trading is enabled
2023.02.0214:43:33.882 Experts automated trading is disabled because the account has been changed
2023.02.0214:43:44.869 Experts automated trading is enabled
Il serait intéressant de savoir ce que c'est ? Pas dans le sens d'une traduction en russe, puisque je l'ai déjà traduite :
2023.02.0214:41:05.466 Автоматическая торговля экспертов отключена, так как аккаунт был изменен
mais de savoir comment un compte peut être modifié ? Quelqu'un peut-il me dire ce qui se passe avec mon compte et ce qu'il faut faire dans de tels cas ?
Peut-être est-ce lié au fait que je suis passé temporairement d'un compte réel à un compte démo ?
Bonjour, est-il possible d'implémenter ou existe-t-il une solution prête à l'emploi pour étirer les graphiques verticalement sans limites comme dans tradingview ?
Aleksey Vyazmikin #: L'Expert Advisor utilise un indicateur sur la TF spécifiée, comment puis-je trouver la TF à partir de la poignée de l'indicateur ?
Je ne comprends pas, le TF spécifié devrait être connu. Vous devez préciser la situation.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Bonjour et bonne humeur !
En tenant compte des critiques constructives, j'ai modifié le code de la fonction de vérification :
Les fonctions CheckMoneyForTrade() et CheckVolumeValue() ne sont pas postées, car elles sont librement disponibles et reprises ici.
Est-ce que ce minimum sera suffisant pour éviter le problème avec l'Expert Advisor que j'ai eu avant-hier?
Cordialement, Vladimir.
Bonjour et bonne humeur à tous !
En tenant compte des critiques constructives, j'ai modifié le code de la fonction de vérification :
Les fonctions CheckMoneyForTrade() et CheckVolumeValue() ne sont pas postées, car elles sont librement disponibles et reprises ici.
Est-ce que ce minimum sera suffisant pour éviter le problème avec l'Expert Advisor que j'ai eu avant-hier?
Cordialement, Vladimir.
Oui, cela semble normal, mais il est préférable de vérifier le volume et la suffisance dans une seule fonction et de changer la logique sur la suffisance. Nous vérifions si le lot de marge est plus grand ou plus petit, mais nous ne le réduisons pas, si le lot demandé est plus petit, je calcule également le lot par rapport à la marge disponible, quel lot peut être défini, et je le compare avec le lot minimum, et s'il est plus petit, alors la transaction est définitivement terminée.
Bonjour à tous ! J'ai un indicateur Stochastique RSI. Le problème est qu'il fonctionne très lentement. D'après ce que j'ai compris, le principal "frein" crée cette section à cause de la grande période, qui est utilisée pour rechercher le minimum et le maximum dans les tableaux :
Idéalement, la solution pourrait être que l'indicateur passe en revue toutes les barres de l'historique lors de la première exécution, et ne mette à jour que la dernière barre lors des suivantes. Mais je ne comprends pas comment faire. Est-il possible de faire cela ? Si oui, je vous serais reconnaissant de partager un lien ou un conseil sur la façon de le faire.
Voici le code complet de l'indicateur :
Je pense que c'est bien, mais il est préférable de mettre la vérification du volume et de la suffisance dans une seule fonction et de changer la logique pour la suffisance également. Nous vérifions si le lot de marge est supérieur ou inférieur, mais nous ne le réduisons pas. Si le lot demandé est inférieur, je calcule également le lot par rapport à la marge disponible, quel lot peut être fixé, et je le compare avec le lot minimum, et s'il est inférieur, la transaction est définitivement terminée.
Merci, Valery !
Cordialement, Vladimir.
Et voici les premiers résultats de la fonction :
Il serait intéressant de savoir ce que c'est ? Pas dans le sens d'une traduction en russe, puisque je l'ai déjà traduite :
mais de savoir comment un compte peut être modifié ? Quelqu'un peut-il me dire ce qui se passe avec mon compte et ce qu'il faut faire dans de tels cas ?
Peut-être est-ce lié au fait que je suis passé temporairement d'un compte réel à un compte démo ?
Cordialement, Vladimir.
Peut-être est-ce lié au fait que je suis passé temporairement d'un compte réel à un compte de démonstration ?
Oui
Merci, Sergey, maintenant je vais savoir.
Bien à vous, Vladimir.
L'Expert Advisor utilise un indicateur sur la TF spécifiée, comment puis-je trouver la TF à partir de la poignée de l'indicateur ?
Je ne comprends pas, le TF spécifié devrait être connu. Vous devez préciser la situation.