Questions des débutants MQL4 MT4 MetaTrader 4 - page 255

 
Mihail Matkovskij #:

Comment calculez-vous tp ?

Je spécifie dans la variable double tp=50 ;

 
Roman Epifanov #:

Je spécifie dans la variable double tp=50 ;

double takeProfit;
takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
 
Mihail Matkovskij #:

écrit maintenant

2021.12.04 13:56:09.509 TestGenerator : erreur de données non concordantes (la valeur haute 1.13110 à 2021.12.03 23:45 n'est pas atteinte depuis la période la plus basse, le prix haut 1.13104 ne concorde pas)


//+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   double lot=0.01;
   while (i<OrdersTotal())
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней
   if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд
   
   if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij #:

mettez-le pendant une minute... ça marche...

mais le niveau d'arrêt est différent -

1 2021.09.16 05:59 vendre 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov #:

écrit maintenant

2021.12.04 13:56:09.509 TestGenerator : erreur de données non concordantes (la valeur haute 1.13110 à 2021.12.03 23:45 n'est pas atteinte depuis la période la plus basse, le prix haut 1.13104 ne concorde pas)


void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   double stopLoss, takeProfit, openPrice;
   double lot=0.01;
   while (i<OrdersTotal())
   {
     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней

   if (Close[0]<ema)
     trend=true ;
   else if(Close[0]>ema)
     trend=false; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[1]<Open[1]) {
     OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA");
   }
   
  }

Toutes les règles sont en ligne, alors vérifiez-les vous-même.

 
Mihail Matkovskij #:

Les règles sont toutes en ligne, alors vérifiez par vous-même.

Merci !

 

Bonsoir messieurs, pourriez-vous nous dire pourquoi le conseiller donne une erreur lors de l'ouverture du deuxième ordre ?


Le texte du conseiller lui-même



//+----------------------Параметры-----------------------------------+

input int TakeProfit = 100 ; // Profit en pips

input int StopLoss = 50 ; // Perte en pips

input double Lot = 0.01 ; // Lot de départ

entrée double Multilot = 1.95 ; // multiplicateur pour le lot de départ

input int Slippage =30 ; // Slippage

input int MagicNumber = 333 ; // Numéro unique


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

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

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

double tp=0 ;

double sl=0 ;

int OnInit()

{

tp=NormalizeDouble(TakeProfit*Point(),Digits()) ;

sl=NormalizeDouble(StopLoss*Point(),Digits()) ;

return(INIT_SUCCEED) ;

}


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

//| Fonction tick expert |

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

void OnTick()

{

//- la boucle vérifie les ordres ouverts lorsque l'Expert Advisor est activé et les calcule.

int buy=0 ; //Nombre d'ordres BUY

int sell=0 ; //Nombre d'ordres de VENTE


for(int i = OrdersTotal()-1 ; i>=0 ; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

si(OrderSymbol()==Symbol())

si(OrderMagicNumber()== MagicNumber)

{

si(OrderType()==OP_BUY)

acheter++ ;

si(OrderType()==OP_SELL)

vendre++ ;

}


//- la boucle reçoit les données du dernier ordre fermé lorsque l'EA est activé.

int type=-1 ; //le type d'un ordre fermé

int history_close_orders=0 ; //nombre d'ordres fermés

double lot=0 ; //Lot du dernier ordre fermé

double profit=0 ; //Profit auquel le dernier ordre a été fermé

datetime time=0 ; //Heure de clôture de la dernière commande


for(int i = OrdersHistoryTotal()-1 ; i>=0 ; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))

si(OrderSymbol()==Symbol())

si(OrderMagicNumber()== MagicNumber)

si(OrderCloseTime()>time)

{

historique_close_ordres++ ;

time = OrderCloseTime();//l'heure de clôture de la dernière commande

lot= OrderLots();//Lot du dernier ordre fermé

type=OrderType();// Type du dernier ordre clôturé

profit=OrderProfit()*OrderSwap()*OrderCommission();//Profit du dernier ordre clôturé

}

//calculer le lot avec lequel l'EA va fonctionner

double Lots_Work=0;// lot de travail


if(history_close_orders==0 || profit>0)// s'il n'y a pas d'ordres fermés ou si le dernier ordre a été fermé sur le profit.

Lots_Work=Lot;// le lot de travail est égal au lot initial


if(history_close_orders>0 && profit<0) // si le dernier ordre a clôturé dans le rouge

Lots_Work=1;// le lot de travail sera égal au lot de la dernière commande multiplié par le multiplicateur.


//ouvrir le premier ordre d'achat

si(buy==0 || profit>0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrGreen) ;

si(ticket<0)

Print("OrderSend a échoué avec l'erreur #",GetLastError()) ;

sinon

Print("OrderSend completed successfully") ;

}


// Ouverture du deuxième ordre d'achat et des suivants

si(buy==0 && type==OP_BUY && profit<0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen) ;

si(ticket<0)

Print("OrderSend a échoué avec l'erreur #",GetLastError()) ;

sinon

Print("OrderSend completed successfully") ;

}


// Ouverture du premier ordre de vente

si(vendre==0 || profit>0)

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed) ;

si(ticket<0)

Print("OrderSend a échoué avec l'erreur #",GetLastError()) ;

sinon

Print("OrderSend completed successfully") ;

}

// Ouverture du deuxième ordre d'achat et des suivants

if(sell==0 && (type==OP_SELL && profit<0))

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrRed) ;

si(ticket<0)

Print("OrderSend a échoué avec l'erreur #",GetLastError()) ;

sinon

Print("OrderSend completed successfully") ;

}


//--Modifier l'ordre en ajoutant le Take Profit et le Stop Loss.

for(int i = OrdersTotal()-1 ; i>=0 ; i--)

if(OrderSelect(i, SELECT_BY_POS))

si(OrderSymbol()==Symbol())

si(OrderMagicNumber()== MagicNumber)

{

si(OrderType()==OP_BUY)

{

si(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(),0,clrGreen))

Print("OrderModify OK !") ;

sinon

Print("OrderModify BUY failed #", GetLastError()) ;

}

si(OrderType()==OP_SELL)

{

si(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed))

Print("OrderModify OK !") ;

sinon

Print("OrderModify SELL failed #", GetLastError()) ;

}

}


}

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


 
Mon ancien ordinateur portable avec processeur i3 avait encore WinXP 32 bits installé, MT5 non pris en charge. J'ai récemment augmenté la mémoire à 6 Go et je souhaite installer un système d'exploitation 64 bits qui puisse faire fonctionner MT4 et MT5. Lequel est préférable - Win7 ou Win8.1 ?
 
atztek #:
Mon ancien ordinateur portable avec processeur i3 avait encore WinXP 32 bits installé, MT5 non pris en charge. J'ai récemment augmenté ma mémoire à 6 Go et je souhaite installer un système d'exploitation 64 bits qui puisse faire fonctionner MT4 et MT5. Lequel est préférable - Win7 ou Win8.1 ?

10

 
Andrey Sokolov #:

10

Cette version est installée sur un nouvel ordinateur portable, lassé des mises à jour constantes. D'ailleurs, les gens écrivent que huit fonctionne mieux que dix sur les vieux ordinateurs portables. Je laisserais bien WinXP sur mon vieil ordinateur portable mais MT5 ne fonctionnera pas dessus, de plus 3Gb de mémoire n'est pas suffisant pour XP. Néanmoins, si le choix est entre 7 et 8.1, qu'est-ce qui est le mieux pour effectuer des optimisations sur MT4/5 ?
Raison: