[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

 
polsvv , c'est à çaque sert la magie.
 
vnn:

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" ?

https://docs.mql4.com/ru/files/FileOpenHistory
 

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.

 
Les gars, expliquez-moi comment utiliser iCustom
J'écris
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0) ;
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0) ;
Je n'arrive pas à le faire correctement...
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 --
 
VOLDEMAR:
Les gars, expliquez-moi comment utiliser iCustom
Je suis en train d'écrire
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0) ;
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0) ;
Je n'arrive pas à le faire correctement...
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.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

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 :

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

Dans EA Start, écrivez :

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

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.

 
Merci .... Si cela m'avait aidé, je ne poserais pas cette question ..............
Raison: