[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 495

 
fmillion:
'' - fin de programme inattendue G:\work\MetaTrader Group\experts\Balista.mq4 (576, 1)

Poke avec la souris - il se déplace à l'endroit avec des commentaires ((.... Que faire ?


Le moyen le plus simple de trouver l'erreur est le bouton magique de MetaEditor "Undo". Et après une autre annulation, essayez de compiler le code à nouveau.
 
Bonne journée ! Dites-moi. Disons que je vais utiliser
double iMA(     string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Dans l'aide, il est dit "délai" - Point. Peut être l'une des périodes d'un graphique. 0 signifie la période du graphique actuel.

Peut-elle, ou est-elle définitivement la période du graphique ? Mais si je mettais 20 au lieu de 15 ? Est-il préférable d'utiliser un nombre ou PERIOD_M15 ?

Ok, je mets 0 là et je ne m'en soucie pas.

 

Bonjour à tous. Je serais très reconnaissant si quelqu'un pouvait insérer un son dans cet indicateur.

C'est-à-dire lorsqu'il y a un croisement de ..... et bien sûr le son ne doit être fait qu'une seule fois à la clôture de la bougie sur laquelle ce croisement a eu lieu.

Merci d'avance pour votre aide.

Dossiers :
 
Dimka-novitsek:
Bonne journée ! Dites-moi. Disons que je vais utiliser

Dans l'aide, il est dit "délai" - Point. Peut être l'une des périodes d'un graphique. 0 signifie la période du graphique actuel.

Peut-elle, ou est-elle définitivement la période du graphique ? Mais si je mettais 20 au lieu de 15 ? Est-il préférable d'utiliser un nombre ou PERIOD_M15 ?

Ok, je mets 0 là et je ne m'en soucie pas.

La période est définie en minutes. Par exemple, 60 est une heure, 240 est 4 heures... etc., 5 est M5.
 

Je n'ai pas trouvé la fonction deKimIV pour retourner le montant du drawdown/profit du dernier ordre fermé.

L'idée est simple : vous devez suivre le montant en devise de dépôt du profit ou du drawdown du dernier ordre clôturé.

 
fmillion:

Je n'ai pas trouvé la fonction deKimIV pour retourner le montant du drawdown/profit du dernier ordre fermé.

L'idée est simple : vous devez suivre le montant en devise de dépôt du profit ou du drawdown du dernier ordre clôturé.

Ce modèle fonctionne pour moi :

//---Поиск крайнего отработавшего ордера для открытия очередной позиции ---   
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print("Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))  continue;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в пероеменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
         
         // Анализ только что закрывшегося ордера      
         if (lastProfit >= 0.0)
         {
...
 
Roman.:

J'ai un tel design qui fonctionne :

et à quoi est égale la variable temps au début de la boucle ?
 
fmillion:

Je n'ai pas trouvé la fonction deKimIV pour retourner le montant du drawdown/profit du dernier ordre fermé.

L'idée est simple : vous devez suivre le montant en devise de dépôt du profit ou du drawdown du dernier ordre clôturé.

L'algorithme est le suivant : rechercher TOUTE fonction qui renvoie QUELQUE CHOSE sur le dernier ordre fermé. Obtenez le ticket de ce dernier ordre fermé. Lorsque la boucle est terminée, vous sélectionnez un ordre par le ticket obtenu et calculez son profit (si c'est important, n'oubliez pas de prendre en compte le swap et la commission dans le calcul) :

    Profit = OrderProfit() + OrderSwap() + OrderCommission();
 
Zhunko:
Exécutez-le et jetez-y un coup d'œil. Un "kit" bien utile.

Je vois que le "chien" et les espaces qui le séparent sont utilisés pour afficher un nombre. Mais pourquoi cela se produit-il ? Est-ce quelque chose qui ne vient pas de la programmation mql ? Est-ce que ça existe en C ?

Je ne comprends pas vraiment pourquoi ça arrive. Et je ne suis pas tout à fait sûr non plus de ce que ça produit. Je vois des chiffres Fibo à certains niveaux à travers le "chien", et à certains niveaux quelque chose d'autre ?

Pouvez-vous expliquer la raison de leur apparition ? Je suis devenu très curieux. Mais je l'ai ouvert pour le deuxième jour et je ne l'ai pas compris.

Je vais dupliquer le code du script pour éviter de le rechercher dans l'historique :

//+------------------------------------------------------------------+
//|                              Brooky_FibIt_Retracement_Script.mq4 |
//|                        Copyright 2012, www.Brooky_Indicators.com |
//|                                        www.Brooky_Indicators.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, www.Brooky_Indicators.com"
#property link      "www.Brooky_Indicators.com"
#property show_confirm  
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

extern int       FibOnChartNum =1;

extern color     Fib_Cbar_Color = Red;
extern int       Fib_Cbar_Size=1;
extern int       Fib_Cbar_Style=2;

extern color     Fib_Level_Color = Gray;
extern int       Fib_Level_Size=1;
extern int       Fib_Level_Style=2;

extern double     Fib_Level_1 = 0;
extern double     Fib_Level_2 = 0.236;
extern double     Fib_Level_3 = 0.382;
extern double     Fib_Level_4 = 0.5;
extern double     Fib_Level_5 = 0.618;
extern double     Fib_Level_6 = 0.764;
extern double     Fib_Level_7 = 1;

string Xtra_txtFib_Level_1  = "Extreme ";
string Xtra_txtFib_Level_2  = "Break OUT ";
string Xtra_txtFib_Level_3  = "Break IN ";
string Xtra_txtFib_Level_4  = "Centre ";
string Xtra_txtFib_Level_5  = "Break IN ";
string Xtra_txtFib_Level_6  = "Break OUT ";
string Xtra_txtFib_Level_7  = "Extreme ";


string txtFib_Level_1  = "";
string txtFib_Level_2  = "";
string txtFib_Level_3  = "";
string txtFib_Level_4  = "";
string txtFib_Level_5  = "";
string txtFib_Level_6  = "";
string txtFib_Level_7  = "";


string FibPrice = " @ %$";
string FibPrice1 = " ";
string FibName = "";

int start()
  {

//----
      txtFib_Level_1 = StringConcatenate(Xtra_txtFib_Level_1,DoubleToStr(Fib_Level_1,3),FibPrice1);
      txtFib_Level_2 = StringConcatenate(Xtra_txtFib_Level_2,DoubleToStr(Fib_Level_2,3),FibPrice);
      txtFib_Level_3 = StringConcatenate(Xtra_txtFib_Level_3,DoubleToStr(Fib_Level_3,3),FibPrice1);
      txtFib_Level_4 = StringConcatenate(Xtra_txtFib_Level_4,DoubleToStr(Fib_Level_4,3),FibPrice);
      txtFib_Level_5 = StringConcatenate(Xtra_txtFib_Level_5,DoubleToStr(Fib_Level_5,3),FibPrice1);
      txtFib_Level_6 = StringConcatenate(Xtra_txtFib_Level_6,DoubleToStr(Fib_Level_6,3),FibPrice);
      txtFib_Level_7 = StringConcatenate(Xtra_txtFib_Level_7,DoubleToStr(Fib_Level_7,3),FibPrice);
      
      
      
      FibName = "Brooky_FibR_"+FibOnChartNum;
      ObjectDelete(FibName);
      
      ObjectCreate(FibName,OBJ_FIBO,0,Time[21],High[24],Time[1],Low[1]);
      
      ObjectSet(FibName, OBJPROP_COLOR,Fib_Cbar_Color);
      ObjectSet(FibName, OBJPROP_WIDTH ,Fib_Cbar_Size);
      ObjectSet(FibName, OBJPROP_STYLE ,Fib_Cbar_Style);
      
      ObjectSet(FibName, OBJPROP_RAY,True);
       
      ObjectSet(FibName, OBJPROP_LEVELSTYLE,Fib_Level_Style);
      ObjectSet(FibName, OBJPROP_LEVELCOLOR,Fib_Level_Color);      
      ObjectSet(FibName, OBJPROP_LEVELWIDTH,Fib_Level_Size);  
       
          
      ObjectSet(FibName, OBJPROP_FIBOLEVELS,7);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+0,Fib_Level_1);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+1,Fib_Level_2);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+2,Fib_Level_3);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+3,Fib_Level_4);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+4,Fib_Level_5);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+5,Fib_Level_6);
      ObjectSet(FibName, OBJPROP_FIRSTLEVEL+6,Fib_Level_7);
      

     
      ObjectSetFiboDescription(FibName,0,txtFib_Level_1);
      ObjectSetFiboDescription(FibName,1,txtFib_Level_2);
      ObjectSetFiboDescription(FibName,2,txtFib_Level_3);
      ObjectSetFiboDescription(FibName,3,txtFib_Level_4);
      ObjectSetFiboDescription(FibName,4,txtFib_Level_5);
      ObjectSetFiboDescription(FibName,5,txtFib_Level_6);
      ObjectSetFiboDescription(FibName,6,txtFib_Level_7);      
      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Mes amis, j'ai rencontré un problème simple, mais je n'arrive pas à le résoudre. L'essentiel est le suivant. Lorsque certaines conditions sont remplies, une transaction s'ouvre (appelons-la "lead trade"). Et j'ai besoin que dans les 3 barres suivantes, si cette condition est répétée, une autre transaction (répétition) soit ouverte. Si, dans les trois barres suivantes, la condition dont j'ai besoin n'est pas remplie, la transaction ne doit pas être rouverte avant la prochaine ouverture de la transaction. Et ainsi de suite. J'ai, pour une raison quelconque, rouvrir seulement une fois (je veux dire, lorsque toutes les conditions sont remplies en général la première fois - il s'ouvre, mais par la suite, quand après la nouvelle affaire de premier plan apparaît condition de l'ouverture d'un commerce de répétition - il n'est pas ouvert). Aidez-nous, s'il vous plaît.

//условие открытия повторной сделки
for (povtor_up=1;povtor_up<4;povtor_up++)
if ((povtor_buy==1) && (adx_cont==1)&&(sb==1))
{
  CL = iClose(NULL,0,1);
  stop = CL - SLP*Point;
  raz_up = (CL - frac_down);
  take_1 = 0;
  take_2 = 0;
  if (CL<(frac_up-FR_OVER*Point))
  take_1 = (CL + raz_up*MNP_1);
  if (CL>=(frac_up-FR_OVER*Point))
  take_2 = (CL + raz_up*MNP_2);
  if (take_1>0)
  {
  take_1n = NormalizeDouble(take_1,5);
  take = take_1n;
  }
  if (take_2>0)
  {
  take_2n = NormalizeDouble(take_2,5);
  take = take_2n;
  }

    if(!IsTradeAllowed())
      {
      Alert("занят торговый поток, повторим попытку buy");
      return(-1);
      }
  ticket_buy_cont=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,stop,take,com,Magic,0,Yellow);
    if(ticket_buy_cont == -1)
    {
    Alert(Symbol(),"ошибка:buy", GetLastError());
    return(-1);
    }
    if(ticket_buy_cont > 1)
    {Alert (Symbol(),"buy повтор - ок !");
    povtor_buy=0;
    povtor_up=0;
    }

}
else 
    povtor_buy=0;
    povtor_up=0;


//условие открытия ведущей сделки
if ((adx_ts==1) && (sb==1) && (FLAG==0))
{
  CL = iClose(NULL,0,1);
  stop = CL - SL*Point;
  raz_up = (CL - frac_down);
  take_1 = 0;
  take_2 = 0;
  if (CL<(frac_up-FR_OVER*Point))
  take_1 = (CL + raz_up*MN_1);
  if (CL>=(frac_up-FR_OVER*Point))
  take_2 = (CL + raz_up*MN_2);
  if (take_1>0)
  {
  take_1n = NormalizeDouble(take_1,5);
  take = take_1n;
  }
  if (take_2>0)
  {
  take_2n = NormalizeDouble(take_2,5);
  take = take_2n;
  }

    if(!IsTradeAllowed())
      {
      Alert("занят торговый поток, повторим попытку buy");
      return(-1);
      }
  ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,stop,take,com,Magic,0,Yellow);
    if(ticket_buy == -1)
    {
    Alert(Symbol(),"ошибка:buy", GetLastError());
    return(-1);
    }
    if(ticket_buy > 1)
    {Alert (Symbol(),"buy при начале - ок !");
    FLAG=1;
    povtor_up=1;
    povtor_buy=1;
    }

}