[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 163
Pourriez-vous me dire comment construire le chemin vers les fichiers d'historique de MetaTrader 4 ? Comme "c:\\n-gram files\N-metatrader 4\N- history\N-alpari-classic\N" ?
cette ligne sort le chemin correct même si l'éditeur se trompe dans les couleurs... Vous devriez probablement écrire le code dans le bloc-notes. Je plaisante.
Dans le tutoriel de Sergey Kovalev, j'ai trouvé un expert - le trailing stop. Je l'ai copié dans MetaEditor, je l'ai compilé, mais le programme ne fonctionne pas. Veuillez me dire quelle en est la raison. Peut-être que je fais quelque chose de mal.
J'ai une tâche qui consiste à obtenir des signaux à partir de l'indicateur des bandes sur les lignes supérieure et inférieure....... Exactement les bandes.....
//-------------------------------------------------------------------- // modifystoploss.mq4 // Conçu pour être utilisé comme exemple dans le tutoriel MQL4. //-------------------------------------------------------------------- extern int Tral_Stop=10 ; // Poursuite de la distance //--------------------------------------------------------------- 1 -- int start() // Fonction spéciale start { string Symb=Symbol() ; // Fin. tool //--------------------------------------------------------------- 2 -- for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle d'ordre { if (OrderSelect(i-1,SELECT_BY_POS)==true) // S'il y a un suivant { // Analyse de l'ordre : int Tip=OrderType() ; // Type d'ordre if(OrderSymbol() !=Symb||Tip>1)continue;// Pas notre ordre double SL=OrderStopLoss() ; // SL de l'ordre sélectionné //------------------------------------------------------ 3 -- while(true) // Boucle de modification { double TS=Tral_Stop ; // Valeur initiale int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Dist. minimale if (TS<Min_Dist) // Si la valeur de l'ordre est inférieure à la valeur autorisée, l'ordre sera exécuté.
TS=Min_Dist ; // Nouvelle valeur de TS //--------------------------------------------------- 4 -- bool Modify=false ; // Non affecté à la modification switch(Tip) // Par type d'ordre { case 0 : // Ordre d'achat si (NormalizeDouble(SL,Digits)< // Si inférieur souhaité.
NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point ; // puis le modifier string Text="Buy " ; // texte pour Buy Modify=true ; // assigné pour modifier } break ; // exit if case 1 : // Ordre de vente si (NormalizeDouble(SL,Digits)> // si demandé ci-dessus.
NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)//or égal à zéro { SL=Ask+TS*Point ; // puis le modifier Text="Sell " ; // Modify=true ; // assigné à modifier } } // Fin du commutateur if (Modify==false) // si non modifié break ; // exit while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit() ; // TP de l'ordre sélectionné.
double Price =OrderOpenPrice() ; // Prix de l'ordre sélectionné. int Ticket=OrderTicket() ; // Numéro de l'ordre sélectionné. Alert ("Modify ",Text,Ticket,". Waiting for reply...") ; bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Modifiez-le !
//--------------------------------------------------- 6 -- if (Ans==true) // Cela a marché :) { Alert ("Order ",Text,Ticket," modified :)") ; break ; // De la boucle modifier.
} //--------------------------------------------------- 7 -- int Error=GetLastError() ; // Il a échoué :( switch(Error) // Surmonter les erreurs { case 130:Alert("Mauvais arrêts. Essayez à nouveau.") ; RefreshRates() ; // Rafraîchir les données continue ; // Sur le prochain itération cas 136:Alert("Pas de prix. Attente d'un nouveau tick...") ; while(RefreshRates()==false) // Jusqu'au nouveau tick Sleep(1) ; // Retard dans la boucle continue ; // Itération suivante cas 146:Alert("Le sous-système de négociation est occupé.Essayez à nouveau") ; Sleep(500) ; // Solution simple RefreshRates() ; // Rafraîchir les données continue ; // Itération suivante // Erreurs critiques cas 2 : Alert("Erreur générale.") ; break ; // Interrupteur de sortie cas 5 : Alert("Ancienne version du terminal client.") ; break ; // Interrupteur de sortie cas 64 : Alert("Compte bloqué.") ; break ; // Exit switch case 133:Alert("Trading prohibited") ; break ; // Exit switch default : Alert("Error ",Error);//Error } break ; // End of modify loop } // End of modify loop //------------------------------------------------------ 8 -- } // End of order analysis //--------------------------------------------------------------- 9 -- return ; // Exit start() } //-------------------------------------------------------------- 10 --
J'ai une tâche qui consiste à obtenir des signaux à partir de l'indicateur des bandes sur les lignes supérieure et inférieure....... Exactement les bandes.....
Dans le tutoriel de Sergey Kovalev, j'ai trouvé un expert - le trailing stop. Je l'ai copié dans MetaEditor, je l'ai compilé, mais le programme ne fonctionne pas. Veuillez me dire quelle en est la raison. Peut-être que je fais quelque chose de mal.
Utilisez ça :
Dans les variables d'utilisateur, nous écrivons :
externstring с9="------ Трейлингстоп ------";
externint TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нетexternint TrailingStep=5; //Шаг трала рыночного ордераexternbool WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить//Иначе, трейлинговать не дожидаясь положительного профита
extern string с10=" -------- Прочие параметры -------------";
extern int MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int Proskalz=10;//Проскальзывание
Après avoir commencé à écrire dans les sous-programmes personnalisés :
// =================================================================================================// ************************* Трейлинг рыночных ордеров *********************************************// =================================================================================================// ================= TrailingRyn() =============================================================// функция осуществляет трейлинг рыночных ордеров // ----------------------------------------------void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit, bool UseTrailingSound) {
string SMB=Symbol();
int i;
int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах int SchBuy=SchBuy(MAGIC);
int SchSell=SchSell(MAGIC);
if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){
for (i=OrdersTotal()-1;i>=0;i--){
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
else {
if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
}
}
}
}
if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
Alert("Трейлинг невозможен - ryn_TrStep==0");
}
// =================================================================================================//+------------------------------------------------------------------+//| Сопровождение позиции простым тралом |//+------------------------------------------------------------------+void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
if(OrderType()==OP_BUY){
if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
}
}
}
if(OrderType()==OP_SELL){
if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
}
}
}
}
//+------------------------------------------------------------------+//| Перенос уровня StopLoss |//| Параметры: |//| ldStopLoss - уровень StopLoss |//+------------------------------------------------------------------+void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
bool fm=false;
string NameTrallingSound = "ok.wav";// Наименование звукового файла для трейлинга
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if(fm!=0 && fm!=-1){
if(UseTrailingSound) { PlaySound(NameTrallingSound);}
}
if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+
Les fonctions comme ModifError() sont mes fonctions personnalisées - elles affichent simplement un message d'erreur. Rédigez plutôt vos propres messages.
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 à tous...
Pourriez-vous me dire comment construire le chemin vers les fichiers d'historique de MetaTrader 4 ? Comme "c:\\n-gram files\N-metatrader 4\N- history\N-alpari-classic\N" ?
Merci beaucoup, Sergeev, je crois que j'ai trouvé...
Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");
cette ligne sort le chemin correct même si l'éditeur se trompe dans les couleurs... Vous devriez probablement écrire le code dans le bloc-notes. Je plaisante.
Bonsoir à tous !
Dans le tutoriel de Sergey Kovalev, j'ai trouvé un expert - le trailing stop. Je l'ai copié dans MetaEditor, je l'ai compilé, mais le programme ne fonctionne pas. Veuillez me dire quelle en est la raison. Peut-être que je fais quelque chose de mal.
est-il écrit en mql ?)
donnez-moi juste le code.
//-------------------------------------------------------------------- // modifystoploss.mq4 // Conçu pour être utilisé comme exemple dans le tutoriel MQL4. //-------------------------------------------------------------------- extern int Tral_Stop=10 ; // Poursuite de la distance //--------------------------------------------------------------- 1 -- int start() // Fonction spéciale start { string Symb=Symbol() ; // Fin. tool //--------------------------------------------------------------- 2 -- for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle d'ordre { if (OrderSelect(i-1,SELECT_BY_POS)==true) // S'il y a un suivant { // Analyse de l'ordre : int Tip=OrderType() ; // Type d'ordre if(OrderSymbol() !=Symb||Tip>1)continue;// Pas notre ordre double SL=OrderStopLoss() ; // SL de l'ordre sélectionné //------------------------------------------------------ 3 -- while(true) // Boucle de modification { double TS=Tral_Stop ; // Valeur initiale int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Dist. minimale if (TS<Min_Dist) // Si la valeur de l'ordre est inférieure à la valeur autorisée, l'ordre sera exécuté. TS=Min_Dist ; // Nouvelle valeur de TS //--------------------------------------------------- 4 -- bool Modify=false ; // Non affecté à la modification switch(Tip) // Par type d'ordre { case 0 : // Ordre d'achat si (NormalizeDouble(SL,Digits)< // Si inférieur souhaité. NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point ; // puis le modifier string Text="Buy " ; // texte pour Buy Modify=true ; // assigné pour modifier } break ; // exit if case 1 : // Ordre de vente si (NormalizeDouble(SL,Digits)> // si demandé ci-dessus. NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)//or égal à zéro { SL=Ask+TS*Point ; // puis le modifier Text="Sell " ; // Modify=true ; // assigné à modifier } } // Fin du commutateur if (Modify==false) // si non modifié break ; // exit while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit() ; // TP de l'ordre sélectionné. double Price =OrderOpenPrice() ; // Prix de l'ordre sélectionné. int Ticket=OrderTicket() ; // Numéro de l'ordre sélectionné. Alert ("Modify ",Text,Ticket,". Waiting for reply...") ; bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Modifiez-le ! //--------------------------------------------------- 6 -- if (Ans==true) // Cela a marché :) { Alert ("Order ",Text,Ticket," modified :)") ; break ; // De la boucle modifier. } //--------------------------------------------------- 7 -- int Error=GetLastError() ; // Il a échoué :( switch(Error) // Surmonter les erreurs { case 130:Alert("Mauvais arrêts. Essayez à nouveau.") ; RefreshRates() ; // Rafraîchir les données continue ; // Sur le prochain itération cas 136:Alert("Pas de prix. Attente d'un nouveau tick...") ; while(RefreshRates()==false) // Jusqu'au nouveau tick Sleep(1) ; // Retard dans la boucle continue ; // Itération suivante cas 146:Alert("Le sous-système de négociation est occupé.Essayez à nouveau") ; Sleep(500) ; // Solution simple RefreshRates() ; // Rafraîchir les données continue ; // Itération suivante // Erreurs critiques cas 2 : Alert("Erreur générale.") ; break ; // Interrupteur de sortie cas 5 : Alert("Ancienne version du terminal client.") ; break ; // Interrupteur de sortie cas 64 : Alert("Compte bloqué.") ; break ; // Exit switch case 133:Alert("Trading prohibited") ; break ; // Exit switch default : Alert("Error ",Error);//Error } break ; // End of modify loop } // End of modify loop //------------------------------------------------------ 8 -- } // End of order analysis //--------------------------------------------------------------- 9 -- return ; // Exit start() } //-------------------------------------------------------------- 10 --Bonsoir à tous !
Dans le tutoriel de Sergey Kovalev, j'ai trouvé un expert - le trailing stop. Je l'ai copié dans MetaEditor, je l'ai compilé, mais le programme ne fonctionne pas. Veuillez me dire quelle en est la raison. Peut-être que je fais quelque chose de mal.
Utilisez ça :
Dans les variables d'utilisateur, nous écrivons :
Dans EA Start, écrivez :
// ----------------------------- Тралим ордера ------------------------------------ TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);Après avoir commencé à écrire dans les sous-programmes personnalisés :
Les fonctions comme ModifError() sont mes fonctions personnalisées - elles affichent simplement un message d'erreur. Rédigez plutôt vos propres messages.
https://docs.mql4.com/ru/indicators/iBands