Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1092

 
Réinstallation du système d'exploitation. Comment restaurer après la réinstallation du système d'exploitation MT4 à l'état dans lequel il était avant la réinstallation.
Indicateurs, EAs, scripts ; modèles, profils ; comptes
 
AlexandrL:
Réinstallation du système d'exploitation. Comment restaurer après la réinstallation du système d'exploitation MT4 à l'état dans lequel il était avant la réinstallation.
Indicateurs, conseillers experts, scripts ; modèles, profils ; comptes
Avant la réinstallation, copiez le dossier du terminal sur une clé USB. Si la version est une version 7 ou supérieure, alors le dossier partagé aussi. Plus de détails sont disponibles ici
 

Après-midi.

Un conseiller basé sur un indicateur fléché.

Vendez sur la fractale supérieure, achetez sur la fractale inférieure. Au travail, max. 1 commande. Mais il y a une erreur quelque part, car le Conseiller Expert ne prend pas en compte les fractales et ne s'ouvre qu'à l'achat. Ou bien il ne s'ouvre pas du tout (si nous changeons le décalage dans iCustom). J'ai essayé d'insérer une condition différente dans le conseiller expert (sur le croisement de la flèche). Tout fonctionne, mais il ne prend pas les données de l'indicateur fléché.

indicateur :

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 Aqua
#property  indicator_color2 Yellow
#property  indicator_width1 2
#property  indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


Le code de la chouette :

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

J'ai déjà essayé toutes sortes de solutions différentes, mais ça ne marche pas. Veuillez me dire où se trouve l'erreur.

Dossiers :
 

Bon après-midi.

Aidez-moi à trouver le prix d'ouverture de la première barre du mardi et à le fixer pour que je puisse calculer à partir de lui toute la semaine.

Merci.

 

Bonjour, je serais reconnaissant si quelqu'un pouvait me dire ce qu'il faut mettre ici pour que l'EA arrête d'ouvrir les ordres en attente après leur déclenchement.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir.
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#lien de propriété "http://cmillion.ru"
#propriété stricte
#property description "Le conseiller expert négocie sur les hausses du marché sans utiliser d'indicateurs."
#property description "L'idée de l'Expert Advisor est que les ordres stop sont déplacés discrètement dans le temps à une distance donnée du prix actuel."
#property description "Si le prix a évolué assez fortement dans une direction, l'EA n'a tout simplement pas le temps de déplacer l'ordre et celui-ci devient un ordre de marché."
#property description "Un ordre de rappel est alors déclenché."
//--------------------------------------------------------------------
extern int Stoploss = 10 ; // Le stoploss, s'il est égal à 0, reste inchangé.
Takeprofit = 50 ; //le Takeprofit, s'il est égal à 0, reste inchangé.
extern int TrailingStop = 10 ; //longueur de tramp, si 0, alors pas de trailing stop
extern int TrailingStart = 0 ; //quand inclure le trall, par exemple après avoir atteint 40 pprofit.
extern int StepTrall = 2 ; //pas de marche - déplacez le StopLoss pas plus près que StepTrall
extern int NoLoss = 0, //transfert au seuil de rentabilité à un nombre spécifié de points de profit, si 0, alors pas de transfert au seuil de rentabilité
MinProfitNoLoss = 0 ; //profit minimum pour le transfert vers le sans perte.
extern int Magic = 77 ; //magie
extern int Step = 10 ; //distance du prix
extern double Lot = 0.1 ;
extern intern TimeModify = 30 ; //le nombre de secondes avant lequel il est interdit de modifier un ordre
extern int slippage = 30 ; //écart maximal de prix autorisé pour les ordres de marché (ordres d'achat et de vente).
//--------------------------------------------------------------------
datetime TimeBarB,TimeBarS ;
//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
double OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0 ;
int b=0,s=0,TicketB=0,TicketS=0,OT ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
si (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
si (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType() ;
OSL = NormalizeDouble(OrderStopLoss(),Digits) ;
OOP = NormalizeDouble(OrderOpenPrice(),Digits) ;
SL=OSL ;
si (OT==OP_BUY)
{
b++ ;
si (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits) ;
si (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo ;
}
si (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits) ;
si (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo ;
}
si (SL > OSL)
{
si (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Erreur ",GetLastError(), "Ordre Modifier Acheter SL ",OSL,"->",SL) ;
else Print("Ordre d'achat Modifier SL ",OSL,"->",SL) ;
}
}
si (OT==OP_SELL)
{
s++ ;
si ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits) ;
si ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo ;
}
si (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits) ;
si (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo ;
}
si ((SL < OSL || OSL==0) && SL!=0)
{
si (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Erreur ",GetLastError(), "Ordre Modifier Vendre SL ",OSL,"->",SL) ;
else Print("Ordre de Vente Modifier SL ",OSL,"->",SL) ;
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP ; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP ; TicketS=OrderTicket();}
}
}
}
si (b+TicketB==0)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent() ;
}
si (s+TicketS==0)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent() ;
}
si (TicketB!=0)
{
si (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent() ;
}
}
si (TicketS!=0)
{
si (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent() ;
}
}
retour(0) ;
}
//--------------------------------------------------------------------

Dossiers :
 
yaaarik777:

Bon après-midi.

Aidez-moi à trouver le prix d'ouverture de la première barre du mardi et à le fixer pour que je puisse calculer à partir de lui toute la semaine.

Merci.

if (DayOfWeek() == 1) Price = iOpen(Symbol(), PERIOD_D1, 4) ;
if (DayOfWeek() >= 2) Price = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2) ;

 

Il s'agit de problèmes liés à MetaTrader : quelqu'un a-t-il rencontré un blocage lors de la saisie d'une procédure ?

Voici un code simple

void OnInit()

{

...

Print("Procédure extérieure") ;

StartBuy(Prix, Prise, Stop, Lot) ;

...

}

void StartBuy(double Price, double Take, double Stop, double Lot)

{

Print("Inside procedure") ;

....

}

Il produit une ligne Procédure extérieure et ensuite le testeur se bloque. Qu'est-ce que c'est ?

 
A13ksandr:

Il s'agit de problèmes liés à MetaTrader : quelqu'un a-t-il rencontré un blocage lors de la saisie d'une procédure ?

Voici un code simple

void OnInit()

{

...

Print("Procédure extérieure") ;

StartBuy(Prix, Prise, Stop, Lot) ;

...

}

Arrêtez de commercer dans l'inite, c'est ce que ça veut dire. Combien de fois ai-je dit qu'inite doit avoir un minimum de code avec la terminaison d'exécution la plus rapide, mais il y a toujours quelqu'un qui est trop paresseux pour lire. Il existe des fonctions standard prédéfinies pour exécuter un programme.

Et l'inite est comme un int, pas une entrée, avec retour de la raison de la terminaison, d'ailleurs, je recommande de l'utiliser de cette façon.

 
Scarick1:

Bonjour, je serais reconnaissant si quelqu'un pouvait me dire ce qu'il faut mettre ici pour que l'EA arrête d'ouvrir les ordres en attente après leur déclenchement.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir.
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#lien de propriété "http://cmillion.ru"
#propriété stricte
#property description "Le conseiller expert négocie sur les hausses du marché sans utiliser d'indicateurs."
#property description "L'idée de l'Expert Advisor est que les ordres stop sont déplacés discrètement dans le temps à une distance donnée du prix actuel."
#property description "Si le prix a évolué assez fortement dans une direction, l'EA n'a tout simplement pas le temps de déplacer l'ordre et celui-ci devient un ordre de marché."
#property description "Un ordre de rappel est alors déclenché."
//--------------------------------------------------------------------
extern int Stoploss = 10 ; // Le stoploss, s'il est égal à 0, reste inchangé.
Takeprofit = 50 ; //le Takeprofit, s'il est égal à 0, reste inchangé.
extern int TrailingStop = 10 ; //longueur de tramp, si 0, alors pas de trailing stop
extern int TrailingStart = 0 ; //quand inclure le trall, par exemple après avoir atteint 40 pprofit.
extern int StepTrall = 2 ; //pas de marche - déplacez le StopLoss au moins aussi près que StepTrall.
extern int NoLoss = 0, //transfert au seuil de rentabilité à un nombre spécifié de points de profit, si 0, alors pas de transfert au seuil de rentabilité
MinProfitNoLoss = 0 ; //profit minimum pour le transfert vers le sans perte.
extern int Magic = 77 ; //magie
extern int Step = 10 ; //distance du prix
extern double Lot = 0.1 ;
extern intern TimeModify = 30 ; //le nombre de secondes avant lequel il est interdit de modifier un ordre
extern int slippage = 30 ; //écart maximal de prix autorisé pour les ordres de marché (ordres d'achat et de vente).
//--------------------------------------------------------------------

datetime TimeBarB,TimeBarS ;

TradingAllowed = true;

//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
double OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0 ;
int b=0,s=0,TicketB=0,TicketS=0,OT ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
si (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
si (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType() ;
OSL = NormalizeDouble(OrderStopLoss(),Digits) ;
OOP = NormalizeDouble(OrderOpenPrice(),Digits) ;
SL=OSL ;
si (OT==OP_BUY)

{

b++ ;

TradingAllowed = false;

si (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits) ;
si (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo ;
}
si (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits) ;
si (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo ;
}
si (SL > OSL)
{
si (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Erreur ",GetLastError(), "Ordre Modifier Acheter SL ",OSL,"->",SL) ;
else Print("Ordre d'achat Modifier SL ",OSL,"->",SL) ;
}
}
si (OT==OP_SELL)
{

s++ ;

TradingAllowed = false;

si ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits) ;
si ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo ;
}
si (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits) ;
si (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo ;
}
si ((SL < OSL || OSL==0) && SL!=0)
{
si (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Erreur ",GetLastError(), "Ordre Modifier Vendre SL ",OSL,"->",SL) ;
else Print("Ordre de Vente Modifier SL ",OSL,"->",SL) ;
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP ; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP ; TicketS=OrderTicket();}
}
}

}

si (b == 0 && s == 0) TradingAllowed = true;

si (b+TicketB==0 && TradingAllowed)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent() ;
}
si (s+TicketS==0 && TradingAllowed)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent() ;
}
si (TicketB!=0)
{
si (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent() ;
}
}
si (TicketS!=0)
{
si (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
si (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits) ; sinon SL=0 ;
si (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits) ; sinon TP=0 ;
si (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent() ;
}
}
retour(0) ;
}
//--------------------------------------------------------------------

D'une certaine manière...


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

Désolé. Bien sûr, tout se passe dans void OnTick(). J'ai écrit moi-même)