Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 623

 
neverness:

J'ai déjà décrit la tâche la plus simple.

Ouvrez MetaEditor.

Cliquez sur Fichier->Créer.

Dans le champ contextuel, sélectionnez Indicateur.

...

Mais ce code n'est pas accepté par le traducteur MQL.

Je vais répondre dans environ 20 minutes

 
neverness:

Que faites-vous, les enfants, à remuer les eaux ?

Personne ne fait d'histoires. La situation commence enfin à s'éclaircir un peu. Il s'avère que l'on appelle un script une fonction qui ne peut pas être placée dans le corps du code principal.

N'oubliez pas non plus que MT est destiné à travailler avec de l'argent qui doit être protégé des attaques de tiers. D'où la plupart des limitations de la langue.

jamais:

J'ai déjà décrit une tâche simple.

Ouvrez MetaEditor.

Cliquez sur Fichier->Créer.

Dans le champ contextuel, sélectionnez Indicateur.

Dans l'indicateur OnCalculate(), introduisez n'importe quel objet script avec l'événement OnStart().

Personnellement, je ne sais pas comment faire. Eh bien, par exemple, comme ça :

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
for(int i = 1 ; i < 100;i++)

{

si(open[i] > Max)

{

OnStart()

Et ici, nous écrivons un script pour construire l'objet qui nous intéresse. Par exemple, une ellipse, une lettre sur un graphique ou autre chose...

} //if(open)

} //for(int i)
//--- retour de la valeur de prev_calculée pour l'appel suivant
return(rates_total)
} // OnCalculate

Cela devrait ressembler à quelque chose comme ça.

Mais le traducteur MQL ne perçoit pas un tel code.

Cela devrait ressembler à quelque chose comme ceci

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
for(int i = 1; i < 100;i++)
      {
      if(open[i] > Max)
            {
            
           if(int  ObjectFind(chart_id, /* идентификатор графика*/ object_name/* имя объекта*/) < 0)
            ObjectCreate(Здесь параметры функции согласно документации.
                         Например, эллипса, или буквы на графике, или еще чего-нибудь);
               
            }  //if(open)
      }  //for(int i)  
//--- return value of prev_calculated for next call
   return(rates_total);
  } // OnCalculate
 
Vitaly Muzichenko:

Dans environ 20 minutes, je répondrai.

Il a fallu beaucoup de temps pour télécharger la vidéo - plus de 40 minutes.


//+------------------------------------------------------------------+
//|                                                          Set.mq5 |
//|                                                   Copyright 2018 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots 0

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
 {
  EllipseCreate(0, "Ellipse", 0, 0, 0, 0, 0, 0, 0, clrRed, STYLE_SOLID, 1, true, true);
//--- indicator buffers mapping
   return(INIT_SUCCEEDED);

 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
 ArraySetAsSeries(time,true);
 ArraySetAsSeries(open,true);
 // ....
  ObjectMove(0, "Ellipse",0,time[1],open[5]);
  ObjectMove(0, "Ellipse",1,time[10],open[15]);
  ObjectMove(0, "Ellipse",2,time[20],open[25]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

bool EllipseCreate(const long            chart_ID=0,        // ID графика 
                   const string          name="Ellipse",    // имя эллипса 
                   const int             sub_window=0,      // номер подокна  
                   datetime              time1=0,           // время первой точки 
                   double                price1=0,          // цена первой точки 
                   datetime              time2=0,           // время второй точки 
                   double                price2=0,          // цена второй точки 
                   datetime              time3=0,           // время третьей точки 
                   double                price3=0,          // цена третьей точки 
                   const color           clr=clrRed,        // цвет эллипса 
                   const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий эллипса 
                   const int             width=1,           // толщина линий эллипса 
                   const bool            fill=false,        // заливка эллипса цветом 
                   const bool            back=false,        // на заднем плане 
                   const bool            selection=true,    // выделить для перемещений 
                   const bool            hidden=true,       // скрыт в списке объектов 
                   const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- установим координаты точек привязки, если они не заданы 
  // ChangeEllipseEmptyPoints(time1,price1,time2,price2,time3,price3); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим эллипс по заданным координатам 
   if(!ObjectCreate(chart_ID,name,OBJ_ELLIPSE,sub_window,time1,price1,time2,price2,time3,price3)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать эллипс! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет эллипса 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль линий эллипса 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линий эллипса 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- включим (true) или отключим (false) режим заливки эллипса 
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим выделения эллипса для перемещений 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
Dossiers :
Set.mq5  10 kb
 
Vitaly Muzichenko:

Le chargement de la vidéo a pris beaucoup de temps - plus de 40 minutes.

Il m'arrive aussi de mélanger les sections du forum et d'écrire une réponse à une question sur mql4 dans mql5.

En principe, dans ce cas, rien ne changera sauf l'extension du fichier, mais dans mql4, elle sera superflue.

 ArraySetAsSeries(time,true);
 ArraySetAsSeries(open,true);

et même complètement inutiles et inutilisables.

 
neverness:

Que faites-vous, les enfants, en réalité, à remuer les eaux ?

Il suffit d'aller dans le MetaEditor, et de taper la commande : Fichier->Créer...

Cela fera apparaître un formulaire avec différents fichiers factices.

En particulier, il s'agira de fichiers factices :

- Conseiller expert

- Indicateur personnalisé

- Script

- Bibliothèque, etc.

Nous sommes intéressés par les trois premiers éléments : Expert Advisor, Custom Indicator et Script.

Comparons ces mannequins :

Dans Expert Advisor, nous avons des événements :

-OnInit(), OnDeinit(), OnTick(), OnTimer, OnChartEvent() ... tout, rien de plus.

Dans le script, nous avons les événements :

- OnStart() ... c'est tout, rien de plus.

dans l'indicateur, nous avons des événements :

- OnInit(), OnCalculate(), OnTimer, OnChartEvent() ... tout, rien de plus.

La question naturelle qui se pose ici est de savoir comment faire le lien entre ces objets.

Il s'avère qu'il n'y a et ne peut y avoir aucune connexion entre eux dans MQL, car les flux de données entre ces objets sont complètement séparés et il n'y a aucune connexion entre eux.

De plus, je suis surpris par le fait que les créateurs de MQL nous donnent ce fait comme un "bien".

Et si, par exemple, en C++, je peux facilement appeler le traducteur BASIC, ou Javascript ou tout autre traducteur, et passer à l'environnement de programmation Android, par exemple,

dans MQL, je ne peux même pas créer un soi-disant "script" dans l'environnement "indicateur", car l'environnement indicateur n'accepte pas la commande OnStart().

Quel genre de monstre est-ce ?

Et il y a plus qu'assez de ces vilaines choses dans MQL.

Ils sont à chaque étape.

Je lis la description de MQL - et je suis surpris, car il n'y a rien d'autre à faire.

Pendant ce temps, les créateurs de MQL proclament haut et fort que MQL est un descendant de C++.

Bien sûr, je suis désolé, mais je veux demander aux créateurs de MQL : - Héritier de quoi ? - Dans sa laideur ?


Je compare involontairement MQL au célèbre environnement de programmation 1C. Ils prétendent également être les héritiers de C++.

Mais tout y est fait de manière beaucoup plus décente.

Et les objets graphiques, et la communication entre les modules et bien plus encore.

Et qu'y a-t-il dans MQL ?

Pas de classes intégrées, pas d'objets liés au thread... et rien du tout.

Et je n'ai rien dit sur l'enveloppe mathématique du terminal ! !!

C'est un tout autre sujet pour les surprises ! !!

Pourquoi ne pas lire un peu d'aide et trouver toutes ces choses que vous prétendez ne pas avoir, lire les cours intégrés en SB, apprendre à demander de l'aide poliment (vous avez demandé de l'aide) et apprendre à ne pas être impoli envers les gens qui essaient de vous aider (notez qu'ils sont désintéressés)...

En général - vous bannir pour 24 heures pour troll, impolitesse et mendicité (vous n'avez pas montré une ligne de votre code pour prouver toutes vos déclarations, mais impudemment exiger des gens qui ont répondu à votre question et les déclarations, ils vous fourniront le code de travail pour vos besoins - ce n'est pas habituel ici - ils aident, pas faire pour vous, note - le code le plus simple)

Sans vouloir vous offenser, celui qui vient à nous avec rien sera tué par quelque chose d'inintelligible.

D'autant plus que je vous avais prévenu de baisser le chauffage :

 

comment installer mt4 sur macOS ? de l'aide s'il vous plaît !

 

Exclusivement dans une machine virtuelle. J'ai Parallel, c'est cher mais pratique et fiable.

https://www.parallels.com/ru/products/desktop/

Запуск Windows на Mac — виртуальная машина Parallels Desktop 14 для Mac
  • www.parallels.com
Можно запустить Windows параллельно с macOS® (перезагрузка не требуется) на компьютерах MacBook®, MacBook Pro®, iMac®, iMac Pro®, Mac mini® или Mac Pro®. Предоставляйте общий доступ к файлам и папкам, копируйте и вставляйте текст и изображения, перетаскивайте файлы между приложениями Mac и Windows. Удобная настройка Parallels Desktop...
 

Je demande de l'aide. Les questions sont les suivantes :

1. Le programme ne fixe pas de stop loss à l'achat et à la vente en mode test. Mais il modifie les ordres en cours.

2. Il ne démarre pas en temps réel sur le compte.

S'il vous plaît, aidez-moi.

J'aimerais également demander de signaler toute erreur qui aurait pu se produire lors de l'écriture du programme.

Merci d'avance.

Code du programme :

.input int Pourcentage=50 ;

entrée int MAGICNUMBER=413 ;

//Introduction aux constantes des indicateurs et aux oscillateurs pour les graphiques à long terme.

entrée int Signal_Period_long_term=6 ;

entrée int Fast_EMA_Period_long_term=12 ;

input int Slow_EMA_Period_long_term=24 ;

//Les paramètres d'impact des indicateurs et des oscillateurs sont des constantes pour les graphiques à court terme.

input int Stochastic_Kperiod_short_term=5 ;

input int Stochastic_Dperiod_short_term=3 ;

input int Stochastic_slowing_short_term=3 ;

entrée ENUM_TIMEFRAMES PERIODs_short_term=PERIOD_M5 ;

entrée ENUM_TIMEFRAMES PERIODs_long_term=PERIOD_H1 ;

//-----------------------------------------------------------------------------------------

//les variables communes et leurs types

static datetime New_Time;//heure de la barre actuelle

statique datetime Time_Local ;

double Margin_Percent ; //Utilisé pour l'ouverture des ordres

double Lots;//Détermination du nombre total de lots

double Lots_Volume ;

//Variables et types pour le graphique à long terme

double MacdCurrent_long_term;//MACD paramètres de la ligne principale de la barre actuelle

double MacdPrevious_long_term;//MACD paramètres de la ligne principale de la barre précédente

double SignalCurrent_long_term ;

//Variables et types pour le graphique à court terme

double Stochastic_Current_short_term_main;//Paramètres stochastiques de la barre courante sur le graphique 5 minutes

double Stochastic_Previous_short_term_main;//Paramètres stochastiques de la barre précédente sur le graphique 5 minutes

double Stochastic_Current_short_term_signal;//Paramètres stochastiques de la barre actuelle dans le graphique 5 minutes

double Stochastic_Previous_short_term_signal;//Paramètres stochastiques de la barre précédente sur le graphique 5 minutes

double StopLoss_BUY ;

double StopLoss_SELL ;

double Price_BUY ;

double Prix_Vente ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'expert |

//+------------------------------------------------------------------+

int OnInit()

{

//---


//---

return(INIT_SUCCEEDED) ;

}

//+------------------------------------------------------------------+

//| Fonction de désinitialisation experte |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

//---


}

//+------------------------------------------------------------------+

//| fonction tick expert |

//+------------------------------------------------------------------+

void OnTick()

{

int ticket,cnt ;

int total=OrdersTotal();// Détermination du nombre de commandes

bool New_Bar=false ; // Marque une nouvelle barre.


//Définir les valeurs des variables pour le graphique à long terme

MacdCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,1) ;

MacdPrevious_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_MAIN,2) ;

SignalCurrent_long_term=iMACD(NULL,PERIODs_long_term,Fast_EMA_Period_long_term,Slow_EMA_Period_long_term,Signal_Period_long_term,PRICE_TYPICAL,MODE_SIGNAL,1) ;

//Détermination des valeurs des variables pour le graphique à court terme

Stochastic_Current_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,1) ;

Stochastic_Previous_short_term_main=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_MAIN,2) ;

Stochastic_Current_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,1) ;

Stochastic_Previous_short_term_signal=iStochastic(NULL,PERIODs_short_term,Stochastic_Kperiod_short_term,Stochastic_Dperiod_short_term,Stochastic_slowing_short_term,MODE_SMA,0,MODE_SIGNAL,2) ;

//Définition des variables communes

Price_BUY=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT) ;

Prix_SELL=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT) ;

StopLoss_BUY=iLow(NULL,PERIODs_short_term,1)-MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT) ;

StopLoss_SELL=iHigh(NULL,PERIODs_short_term,1)+MarketInfo(NULL,MODE_STOPLEVEL)*MarketInfo(NULL,MODE_POINT) ;

Margin_Percent=AccountFreeMargin()*Percent/100 ;

Lots=NormalizeDouble(Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED),2) ;

Lots_Volume=NormalizeDouble(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP),2) ;

//-----------------------------------------------------------------------------------------------------------------------

//----- Определение нового бара------------------------------------------------------------------------------------------

New_Time=TimeCurrent() ;

Print("Time=",TimeCurrent() ;

Print("Bar open time =",iTime(NULL,PERIODs_short_term,0)) ;

if(iTime(NULL,PERIODs_short_term,0)==New_Time) // Compare les temps

{

if(iVolume(NULL,PERIODs_short_term,0)<=2) //compare le volume

Print("Volume de la barre =",Volume[0]) ;

if(iBarShift(NULL,PERIODs_short_term,TimeCurrent())==0)//Check the bar index

Print("Bar index =",iBarShift(NULL,PERIODs_short_term,TimeCurrent()) ;

New_Bar=true ; // Une nouvelle barre est capturée.

Print("New_Bar") ;

}

else if(New_Bar==false) // Si la barre n'est pas nouvelle...

{

Print("La barre n'est pas nouvelle") ;

retour ;

}

//---Contrôle de la disponibilité des fonds pour l'ouverture du lot minimum

if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT))

{

Print("Pas assez de fonds. Fonds libres = ",AccountFreeMargin()) ;

retour ;

}

//---Détermination du numéro de lot

si(Lots>Lots_Volume)

{

Lots=NormalizeDouble(Lots_Volume,2) ;

Print("Nombre de lots : ",Lots) ;

}

autre si(Lots<Lots_Volume)

{

Lots=NormaliserDouble(MathFloor(Lots),2) ;

Print("Nombre de lots : ",Lots) ;

}

//+------------------------------------------------------------------+

//| Conditions d'ouverture des ordres si le nombre d'ordres est égal à zéro | |

//+------------------------------------------------------------------+

si(total<1)

{


if(MacdCurrent_long_term<0 && MacdCurrent_long_term>SignalCurrent_long_term)

Print("La condition est vraie pour BUY") ;

{

//+---------------------------------------------------------------------------+

//| Condition pour ouvrir une position longue BUY uniquement |

//+---------------------------------------------------------------------------+

if(Stochastic_Current_short_term_main<Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main>=Stochastic_Previous_short_term_signal)

{

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price_BUY,3,0,0,NULL,MAGICNUMBER,0,Blue) ;

if(ticket>0)//vérification de la position ouverte

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

retour ;

}

else Print("BUY order open error : ",GetLastError()) ;

retour ;

}

}

}

if(MacdCurrent_long_term>0 && MacdCurrent_long_term<SignalCurrent_long_term)

Print("La condition est vraie pour SELL") ;

{

//+---------------------------------------------------------------------------+

//| Condition pour l'ouverture de positions courtes SELL uniquement |

//+---------------------------------------------------------------------------+

if(Stochastic_Current_short_term_main>Stochastic_Current_short_term_signal && Stochastic_Previous_short_term_main<=Stochastic_Previous_short_term_signal)

{

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Price_SELL,3,0,0,NULL,MAGICNUMBER,0,Green) ;

if(ticket>0)//vérification de la position ouverte

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;

retour ;

}

else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;

retour ;

}

}

}

}


//+---------------------------------------------------------------------------+

//| Conditions de modification de la commande |

//+---------------------------------------------------------------------------+


for(cnt=0;cnt<total;cnt++)

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

{

if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))

continuer ;

if(OrderMagicNumber()==MAGICNUMBER && // vérifier le numéro magique de la commande

OrderSymbol()==Symbol()) // vérification du symbole de l'ordre

{

//--- position longue ouverte

si(OrderType()==OP_BUYSTOP)

{

si(OrderOpenPrice()<Price_BUY && Ask<Price_BUY)

{

if(OrderModify(OrderTicket(),Price_BUY,0,0,0,0,Blue))

Print("La commande Price_BUY a été modifiée avec succès.") ;

else Print("Erreur lors de la modification de l'ordre BUYStop. Code d'erreur=",GetLastError()) ;

retour ;

}

else Print("Le prix de la modification est supérieur au prix de la commande") ;

retour ;

}

si(OrderType()==OP_SELLSTOP)

{

si(OrderOpenPrice()<Price_SELL && Bid>Price_SELL)

{

if(OrderModify(OrderTicket(),Price_SELL,0,0,0,0,Green))

Print("L'ordre Prix_SELL a été modifié avec succès.") ;

else Print("Erreur lors de la modification de l'ordre SELLStop. Code d'erreur=",GetLastError() ;

retour ;

}

}

si(OrderType()==OP_BUY)

{

si(OrderStopLoss()<StopLoss_BUY && StopLoss_BUY<Ask)

{

if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_BUY,0,0,Blue))

Print("Prix de la commande Price_BUY modifié avec succès.") ;

else Print("Erreur lors de la modification de la commande BUY. Code d'erreur=",GetLastError()) ;

retour ;

}

}

si(OrderType()==OP_SELL)

{

if(OrderStopLoss()>StopLoss_SELL && StopLoss_SELL>Bid)

{

if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss_SELL,0,0,Green))

Print("Prix_SELL prix de l'ordre modifié avec succès.") ;

else Print("Erreur lors de la modification de l'ordre SELL. Code d'erreur=",GetLastError() ;

retour ;

}

}

}

}


}

//+------------------------------------------------------------------+

 

Aide à corriger un bug dans l'indicateur, il ne dessine pas le haut et le bas du jour quand il est sur la dernière bougie de l'heure.

https://prnt.sc/kut6xo

https://prnt.sc/kut79b

Скриншот
Скриншот
  • prnt.sc
Снято с помощью Lightshot
Dossiers :
 
Michail_David:

Je demande de l'aide. Les questions sont les suivantes :

1. Le programme ne fixe pas de stop loss à l'achat et à la vente en mode test. Mais la modification des ordres en cours se passe bien.

2. Il ne démarre pas en temps réel sur le compte.


C'est ainsi que

 if(OrderType()==OP_SELL)

           {

            if(OrderStopLoss()!= StopLoss_SELL && StopLoss_SELL>Bid)

modifiera le code ET, insérez-le correctement (Alt+S).

Raison: