Come ottenere un programmatore interessato al 100% a scrivere un EA basato sulla tua IDEA - pagina 11

 

Oppure organizzare un'impostazione di take profit regolabile in questo EA.

Ecco il codice completo.

 
//+------------------------------------------------------------------+
//|                                                         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:

Oppure organizzare un'impostazione di take profit regolabile in questo EA.

Ecco il codice completo.

L'avete provato?
 
Registr:
Ultramarina:

Oppure organizzare un'impostazione di take profit regolabile in questo EA.

Ecco il codice completo.

Hai provato a lavorare?
Se questo è il codice EA completo, allora Registr ti ha dato il miglior consiglio.
 

Ora posso aggiungere alcune osservazioni

1. l'operatore return(0) appartenente alla funzione iniziale dovrebbe essere almeno duplicato sotto una parentesi graffa. Poiché sarà eseguito solo se la condizione per il volume di 1 è soddisfatta.

il resto del tempo la funzione di avvio dovrebbe chiudersi in modo errato.

le 2 condizioni del valore dell'indicatore chiamato <1000 è probabilmente l'idea per mostrare che sulla barra non c'è un valore dai buffer

cioè una sorta di incrocio (cambiamento di colore dell'indicatore e la sua posizione relativa al prezzo corrente)

Temo che in questo caso funzionerà solo per quei simboli con il valore del prezzo corrente maggiore di 1000 (per esempio, PDR)

se l'indicatore disegna solo un colore sulla barra corrente (il valore di un altro buffer su questa barra è 0)

Altrimenti su quasi tutte le coppie di valute il valore corrente dell'indicatore sarà sempre inferiore a 1000, e le condizioni si attiveranno su ogni barra

3. Raccomando di prendere la condizione di una nuova barra come segue


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



 
olyakish:

Ora posso aggiungere alcune osservazioni

1. l'operatore return(0) appartenente alla funzione iniziale dovrebbe essere almeno duplicato sotto una parentesi graffa. Poiché sarà eseguito solo se la condizione per il volume di 1 è soddisfatta.

il resto del tempo la funzione di avvio dovrebbe chiudersi in modo errato.

le 2 condizioni del valore dell'indicatore chiamato <1000 è probabilmente l'idea per mostrare che sulla barra non c'è un valore dai buffer

cioè una sorta di incrocio (cambiamento di colore dell'indicatore e la sua posizione relativa al prezzo corrente)

Temo che in questo caso funzionerà solo per quei simboli con il valore del prezzo corrente maggiore di 1000 (per esempio, PDR)

se l'indicatore disegna solo un colore sulla barra corrente (il valore di un altro buffer su questa barra è 0)

Altrimenti su quasi tutte le coppie di valute il valore corrente dell'indicatore sarà sempre inferiore a 1000, e le condizioni si attiveranno su ogni barra

3. Raccomando di prendere la condizione di una nuova barra come segue


Faresti meglio a dirgli quali tasti premere... :)
 

Oh, ed ecco un'altra cosa.

4. Chiamare l'indicatore personalizzato 12 volte è blasfemo come minimo :)

nel tuo caso, 6 volte saranno sufficienti (ho contato così tante volte)

La velocità di elaborazione del tuo EA crescerà non di due volte, ma di 1,5 volte secondo me. Queste azioni solo (ottimizzazione del codice), da non confondere con l'ottimizzazione dei parametri


//+------------------------------------------------------------------+
//|                                                         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 но так вроде писать нельзя ...
    }
//+------------------------------------------------------------------+

Almeno così

Controllare



 
Purtroppo non funziona
 

Qualcuno può spiegare

Ci sono due EA identici con parametri assolutamente identici

Uno compra allo stesso tempo un altro vende allo stesso tempo

I momenti di entrata e di uscita sono gli stessi

Come fanno a sparire entrambi in modo pulito?

 
Ultramarin:

Come possono entrambi fondersi in modo pulito?

Sulla diffusione.