Comment faire en sorte qu'un programmeur s'intéresse à 100 % à l'écriture d'un EA basé sur votre IDEA ? - page 11

 

Ou organisez un paramètre de prise de profit ajustable dans cet EA.

Voici le code complet.

 
//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
extern double lot=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int tiket=0;
//----
if (iVolume(NULL,0,0)==1){
    Print("WATR1="+iCustom( NULL, 0, "WATR", 0, 0) );
    Print("WATR2="+iCustom( NULL, 0, "WATR", 1, 0) );
    
    if (iCustom( NULL, 0, "WATR", 0, 2)<1000 && iCustom( NULL, 0, "WATR", 1, 1)<1000) {tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,iCustom( NULL, 0, "WATR", 1, 0),0,NULL,16384,0,Red);}
    if (iCustom( NULL, 0, "WATR", 1, 2)<1000 && iCustom( NULL, 0, "WATR", 0, 1)<1000) {tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3, iCustom( NULL, 0, "WATR", 0, 0),0,NULL,16384,0,Green);}
    CheckOrders();
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
}
void CheckOrders(){
int pos=0;
int total=OrdersTotal();
for (pos=0;pos<total;pos++) {
if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true){ 
if (OrderType()==OP_BUY && OrderStopLoss()<iCustom( NULL, 0, "WATR", 0, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 0, 1),OrderTakeProfit(),0,Green);
if (OrderType()==OP_SELL && OrderStopLoss()>iCustom( NULL, 0, "WATR", 1, 1))OrderModify(OrderTicket(),OrderOpenPrice(),iCustom( NULL, 0, "WATR", 1, 1),OrderTakeProfit(),0,Red);
                                                                                   }
                                                          }
                                      }
 
Ultramarin:

Ou organisez un paramètre de prise de profit ajustable dans cet EA.

Voici le code complet.

L'avez-vous essayé ?
 
Registr:
Ultramarine:

Ou organisez un paramètre de prise de profit ajustable dans cet EA.

Voici le code complet.

Avez-vous essayé de travailler ?
Si c'est le code complet de l'EA, alors Registrar vous a donné le meilleur conseil.
 

Je peux maintenant ajouter quelques remarques

1. l'opérateur return(0) appartenant à la fonction de départ doit au moins être dupliqué sous une accolade. Puisqu'il ne sera exécuté que si la condition du volume de 1 est remplie.

le reste du temps, la fonction de démarrage doit se fermer de manière incorrecte.

les 2 conditions de la valeur de l'indicateur appelé <1000 est probablement l'idée de montrer que sur la barre il n'y a pas une seule valeur des tampons.

c'est-à-dire une sorte de croisement (changement de couleur de l'indicateur et de sa position relative par rapport au prix actuel)

Je crains que dans ce cas, cela ne fonctionne que pour les symboles dont la valeur du prix actuel est supérieure à 1000 (par exemple, PDR).

si l'indicateur ne dessine qu'une seule couleur sur la barre actuelle (la valeur d'un autre tampon sur cette barre est 0)

Sinon, sur presque toutes les paires de devises, la valeur actuelle de l'indicateur sera toujours inférieure à 1000, et les conditions se déclencheront sur chaque barre.

3. je recommande de prendre la condition d'un nouveau bar comme suit


int time;
 
int start
   {
      if (time!=Time[1])
         {
            // расчет индикатора и выполение действий с ордерами
            //-----
            //-----
            //-----
            //-----
            time=Time[1];
 
         }
       return(0);
   }



 
olyakish:

Je peux maintenant ajouter quelques remarques

1. l'opérateur return(0) appartenant à la fonction de départ doit au moins être dupliqué sous une accolade. Puisqu'il ne sera exécuté que si la condition du volume de 1 est remplie.

le reste du temps, la fonction de démarrage doit se fermer de manière incorrecte.

les 2 conditions de la valeur de l'indicateur appelé <1000 est probablement l'idée de montrer que sur la barre il n'y a pas une seule valeur des tampons.

c'est-à-dire une sorte de croisement (changement de couleur de l'indicateur et de sa position relative par rapport au prix actuel)

Je crains que dans ce cas, cela ne fonctionne que pour les symboles dont la valeur du prix actuel est supérieure à 1000 (par exemple, PDR).

si l'indicateur ne dessine qu'une seule couleur sur la barre actuelle (la valeur d'un autre tampon sur cette barre est 0)

Sinon, sur presque toutes les paires de devises, la valeur actuelle de l'indicateur sera toujours inférieure à 1000, et les conditions se déclencheront sur chaque barre.

3. je recommande de prendre la condition d'un nouveau bar comme suit


Vous feriez mieux de lui dire sur quelles touches appuyer... :)
 

Oh, et il y a autre chose.

4. Appeler l'indicateur de personnalisation 12 fois est pour le moins un blasphème :)

dans votre cas, 6 fois seront suffisantes (j'ai compté autant de fois)

La vitesse de traitement de votre EA ne sera pas multipliée par deux, mais par 1,5 à mon avis. Ces actions ne concernent que l'optimisation du code, à ne pas confondre avec l'optimisation des paramètres.


//+------------------------------------------------------------------+
//|                                                         Gray.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//|                                   обработал напильником olyakish |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"
 
extern double lot=1;
extern string rem01="Профит в пунктах от текущей цены";
extern int TP=100;
 
int time;
double WATR[2,3];// первое измерение - индекс буфера; второе измерение - индекс бара 
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int tiket=0;
 
   if (Time[1]!=time)
      {
         WATR[0,0]=iCustom( NULL, 0, "WATR", 0, 0);
         WATR[1,0]=iCustom( NULL, 0, "WATR", 1, 0);
         WATR[0,1]=iCustom( NULL, 0, "WATR", 0, 1);
         WATR[1,1]=iCustom( NULL, 0, "WATR", 1, 1);
         WATR[0,2]=iCustom( NULL, 0, "WATR", 0, 2);
         WATR[1,2]=iCustom( NULL, 0, "WATR", 1, 2);         
         Print("WATR1=",WATR[0,0]);
         Print("WATR2=",WATR[1,0]);
    
         if (WATR[0,2]>0 && WATR[1,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket= OrderSend(Symbol(),OP_BUY,lot,Ask,3,WATR[0,0],Bid+TP*Point,NULL,16384,0,Green);
            }
         if (WATR[1,2]>0 && WATR[0,1]>0) // проверить это место (правильно ли будет направелние  открытия по индикатору)
            {
               tiket =OrderSend(Symbol(),OP_SELL,lot,Bid,3,WATR[1,0],Ask-TP*Point,NULL,16384,0,Red);                           
            }
         CheckOrders();
         time=Time[1];
      }
   return(0);
  }
//+------------------------------------------------------------------+
void CheckOrders()
   {
      int pos=0;
      int total=OrdersTotal();
      for (pos=0;pos<total;pos++) 
         {
            if (OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
               { 
                  if (OrderType()==OP_BUY && OrderStopLoss()<WATR[0,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[0,1],OrderTakeProfit(),0,Green);}
                  if (OrderType()==OP_SELL && OrderStopLoss()>WATR[1,1]){OrderModify(OrderTicket(),OrderOpenPrice(),WATR[1,1],OrderTakeProfit(),0,Red);}
               }
         }
      return(0);  // на самом деле нужно просто return но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Au moins comme ceci

Vérifiez



 
Malheureusement, ça ne marche pas.
 

Quelqu'un peut-il expliquer

Il y a deux EA identiques avec des paramètres absolument identiques.

L'un achète au même moment, l'autre vend au même moment.

Les moments d'entrée et de sortie sont les mêmes

Comment les deux disparaissent-ils proprement ?

 
Ultramarin:

Comment les deux peuvent-ils fusionner proprement ?

Sur l'écart.
Raison: