[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 863

 
IgorM:

quel est le meilleur moyen de sauvegarder des données/variables importantes en cas de blocage du terminal (panne de courant) ?

- les variables globales du terminal ? vers un fichier ?

- à quelle fréquence doivent-ils être sauvegardés ? (la dernière valeur d'équité et quelques bools sont importants)

Quel est le problème, tout dans un tableau, et le tableau dans un fichier à chaque tic, lire le fichier dans l'initialisation, et pas de problèmes.
 

Bonjour !

Je n'arrive pas à comprendre pourquoi je ne peux pas modifier une position ouverte, j'ai tapé l'ordre (dans la fonction de sélection des ordres)

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"


extern bool In_BUYSTOP=true ;
extern intProfit_buy=100 ;
extern int StopLoss_buy=5 ;
extern double Lots_buy=0.01 ;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true ;
externe interne TakeProfit_sell=100 ;
extern int StopLoss_sell =5 ;
extern double Lots_sell =0.01 ;
extern int LevelProfit = 25 ; // - Niveau de profit en points, qu'il faut atteindre pour transférer son stop au niveau du Breakeven.
extern int LevelWLoss = 1 ; // - Niveau de seuil de rentabilité en points, vers lequel la position d'arrêt sera déplacée lorsque son profit aura atteint le niveau de profit en points.

//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point) ; // BUY
int profitsell=((OrderOpenPrice()- Ask)/Point) ; // VENTE
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket ;
si (Bid >iHigh(NULL,PERIOD_D1,1))
{
si(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
si (Ask <iLow(NULL,PERIOD_D1,1))
{
si(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
retour(0) ;
}
//+------------------------------------------------------------------+
si(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType() ;
order_type=OP_SELL ;
int profitsell=((OrderOpenPrice()- Ask)/Point) ;
si (bénéfices>5)
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue) ;
retour(0) ;
}
si(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY ;
int profitbuy=((Bid - OrderOpenPrice())/Point) ;
si (profitbuy>5)
int stopmodify=OrderOpenPrice() ;
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue) ;
retour(0) ;
}
 

Chers développeurs, une question pour vous.

Je n'arrive pas à faire fonctionner correctement la variable globale de l'indicateur lorsque j'appelle l'indicateur à partir d'un conseiller expert.

Voici le code de l'indicateur (seulement les chaînes qui sont importantes pour comprendre la question).

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

À chaque barre, il enregistre le prix actuel dans la variable globale price et l'affiche sur la barre suivante. Ainsi, nous devrions voir le graphique des prix retardé d'une barre. Si nous attachons l'indicateur au graphique, tout fonctionne correctement :

Mais si l'on appelle cet indicateur depuis l'EA et que l'on effectue un test visuel, nous verrons à la fin du test : l'indicateur ne ressemble que très peu à ce qu'il est censé être.

Si maintenant nous recalculons l'indicateur sur le graphique de test visuel (par exemple, ouvrir et fermer ses propriétés), tout revient à la normale - nous voyons à nouveau la première image.

Qu'est-ce que je fais de mal ?

J'ai fait une recherche, mais je n'ai pas trouvé de réponse.

J'utilise MT4 Version 4.00 Build 226.

 
Je pense que c'est parce qu'il n'y a pas assez de tics dans l'histoire. C'est pour ça qu'il manque. En temps réel, tout devrait être clair ! ;)
 

Bonjour, veuillez indiquer où se trouve l'imprécision dans le code, car il y a une telle erreur dans le journal lorsque le script est exécuté :

15:40:29 11dP_real_symbol EURUSD,H4 : <--- 2 graphiques corrects trouvés. --->

15:40:29 11dP_real_symbol EURUSD,H4 : <--- Pour voir les résultats, ouvrez le graphique EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4 : le nom du symbole pour la fonction MarketInfo doit être une chaîne de caractères.

15:40:29 11dP_real_symbol : paramètre de chaîne vide pour la fonction FileWriteString

15:40:29 11dP_real_symbol EURUSD,H4 : le nom du symbole pour la fonction MarketInfo doit être une chaîne de caractères.

15:40:29 11dP_real_symbol EURUSD,H4 : <--- Pour voir les résultats, ouvrez les graphiques,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

15:40:30 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

15:40:31 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

Je joins moi-même le code ci-dessous :

Dossiers :
11dp.mq4  15 kb
 
IgorM:

quel est le meilleur moyen de sauvegarder des données/variables importantes en cas de blocage du terminal (panne de courant) ?

- les variables globales du terminal? vers un fichier ?

- à quelle fréquence doivent-ils être sauvegardés ? (la dernière valeur d'équité et certains bools du conseiller sont importants).


Contrairement aux autres variables, une variable GV peut non seulement être créée à partir de n'importe quel programme, mais aussi être supprimée. La valeur de la variable GV reste sur le disque dur de l'ordinateur même après la fermeture du terminal client. Une fois déclarée, la variable GV existe dans le terminal du client pendant 4 semaines depuis le dernier appel. Si aucun programme n'a accédé à la variable GV pendant cette période, la variable GV est supprimée par le terminal client. Une variable GV ne peut être que de type double.
 
etroplus:

Bonjour !

Je ne comprends pas pourquoi je ne peux pas modifier une position ouverte, j'ai tapé l'ordre (dans la fonction de sélection d'ordre).

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#lien de propriété "http://www.metaquotes.net"


extern bool In_BUYSTOP=true ;
extern intProfit_buy=100 ;
extern int StopLoss_buy=5 ;
extern double Lots_buy=0.01 ;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true ;
externe interne TakeProfit_sell=100 ;
extern int StopLoss_sell =5 ;
extern double Lots_sell =0.01 ;
extern int LevelProfit = 25 ; // - Niveau de profit en points, qu'il faut atteindre pour transférer son stop au niveau du Breakeven.
extern int LevelWLoss = 1 ; // - Niveau de seuil de rentabilité en points, vers lequel la position d'arrêt sera déplacée lorsque son profit aura atteint le niveau de profit en points.

//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point) ; // BUY est redondant, d'abord toutes les variables sont égales à 0
int profitsell=((OrderOpenPrice()- Ask)/Point) ; // VENTE
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de désinitialisation des experts |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retour(0) ;
}
//+------------------------------------------------------------------+
//| fonction de démarrage de l'expert |
//+------------------------------------------------------------------+
int start()
//----
{
int ticket ;
si (Bid >iHigh(NULL,PERIOD_D1,1))
{
si(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
si (Ask <iLow(NULL,PERIOD_D1,1))
{
si(OrdersTotal() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
retour(0) ;
}
//+------------------------------------------------------------------+
si(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType() ;
order_type=OP_SELL;//maybeif(order_type==OP_SELL), alors plus de parenthèses sont nécessaires
int profitsell=((OrderOpenPrice()- Ask)/Point) ;
if (profitsell>5)//alorsvous allez essayer de modifier l'ordre à chaque tick ?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue) ;
retour(0) ;
}
si(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY ;
int profitbuy=((Bid - OrderOpenPrice())/Point) ;
si (profitbuy>5)
int stopmodify=OrderOpenPrice() ;
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue) ;
retour(0) ;
}
 
Bonjour, veuillez indiquer où se trouve l'imprécision dans le code, car il y a une telle erreur dans le journal lorsque le script est exécuté :


15:40:29 11dP_real_symbol EURUSD,H4 : <--- 2 graphiques corrects trouvés. --->

15:40:29 11dP_real_symbol EURUSD,H4 : <--- Pour voir les résultats, ouvrez le graphique EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4 : le nom du symbole pour la fonction MarketInfo doit être une chaîne de caractères.

15:40:29 11dP_real_symbol : paramètre de chaîne vide pour la fonction FileWriteString

15:40:29 11dP_real_symbol EURUSD,H4 : le nom du symbole pour la fonction MarketInfo doit être une chaîne de caractères.

15:40:29 11dP_real_symbol EURUSD,H4 : <--- Pour voir les résultats, ouvrez les graphiques,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

15:40:30 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

15:40:31 11dP_real_symbol EURUSD,H4 : le premier paramètre pour la fonction WindowHandle doit être une chaîne initialisée

Je joins le code lui-même ci-dessous :
Dossiers :
11dp_1.mq4  15 kb
 

Veuillez me dire ce que signifie la variable "OP BUY" attendue.

ici while(difference>Span)
( OrderSend (string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) )

while(0-different>Red)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, string comment=0, int magic=0, date expiration=0, color arrow_color=Black) )

 
Comment puis-je écrire un point sur le graphique dans mql4 ? J'ai besoin d'écrire le prix et le temps de sorte qu'il reste en place à n'importe quel cadre temporel.