Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 747

 
TarasBY:

2) Non ci possono essere frattali UPPER e LOWER sulla stessa barra allo stesso tempo, rispettivamente, controllare

appartiene alla categoria dell'idiozia del programmatore.

Quindi queste citazioni sono solo per gli idioti.


 
TarasBY:

2) Non ci possono essere frattali UPPER e LOWER sulla stessa barra allo stesso tempo, rispettivamente, controllare

appartiene alla categoria dell'idiozia dei programmatori.


Entrambi i frattali possono essere sulla stessa barra
 
Vinin:
Entrambi i frattali possono essere sulla stessa barra
intendeva minuti, ma ha dimenticato i mesi
 
Ciao

C'è la seguente linea nel codice

 if (G_time_344 == Time[0]) return (0);
Per quanto ho capito, è responsabile del fatto che l'EA ritardi il ricalcolo fino alla comparsa di una nuova barra. Finché il tempo di apertura della barra zero non cambia, il ricalcolo si ferma.

Di conseguenza, se apro un EA su minuti, sarà ricalcolato ad ogni nuovo minuto. E se lo apro su H4, sarà ricalcolato ogni 4 ore.

Come scrivere correttamente questa linea, in modo che l'EA non prenda il tempo di apertura della barra corrente, cioè, la barra in cui il terminale è aperto, ma quella che specificherò nelle impostazioni? Cioè, metto l'EA su H4, per esempio, e ricalcolerà ogni 5 minuti, perché l'ho impostato così. O ogni minuto.


 
_new-rena:
intendeva minuti, ma ha dimenticato i mesi

Qual è la differenza tra minuti e mesi?


 
evillive:
Di cosa si lamenta nel registro delle modifiche? "Stupidamente apre nuovi ordini in sospeso" perché non c'è un limite, ma c'è un OrderSend.
Nessun errore, solo triangoli gialli.
 
AlexeyVik:

Qual è la differenza tra minuti e mesi?

Sono d'accordo, ci sono bei momenti anche sulla M1. ma sui mesi ogni bar è così.
 
Non ci sono altre domande, l'ho risolto da solo.
 
TarasBY:

1) Qualsiasi strategia deve essere definita dal numero di ordini aperti allo stesso tempo. Di conseguenza, prima di aprire il prossimo ordine, dovremmo controllare quanti sono già aperti.

2) Su una barra, non ci possono essere frattali SUPERIORI e INFERIORI allo stesso tempo, rispettivamente, il controllo è classificato come

appartiene alla categoria dell'idiozia del programmatore.

3) Prima di scrivere le condizioni per restituire i valori dell'indicatore del buffer, è necessario sapere esattamente quale valore è "vuoto" per esso? Avete controllato che sia 0?

4) Il costrutto.

Anche se funzionerà (nella maggior parte dei casi), ma è innaturale, perché è un'idea del "libero arbitrio" dello sviluppatore, ed è disinformativa per il commerciante. Un'alternativa - il tracciamento di una nuova barra.

5) Bisogna partire dalle basi, perché questo:

Indica che non capisci affatto quello che stai scrivendo.

Il modo migliore per capire è studiare come funzionano i codici degli altri e modificarli per i propri scopi. Buona fortuna.

Li mostra come sono scritti, punto per punto. Non li modifica, cosa di cui non hai detto una parola. Ecco il codice completo:
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);       //верхний фрактал,формируется на третьей свече
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);     //нижний фрактал,формируется на третьей свече                                                   
//----
  if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        {
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        }
     
       }   
   else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
               } 
             }
         }
    
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }}
//+------------------------------------------------------------------+
Sto cercando di scrivere come ho letto, guardato, capito. La tua critica mi ricorda un manuale MQL4 - lo capisco solo se qualcuno me lo spiega.
 
if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
       } // это пара к той...
      }
     


E questo codice

if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака

è meglio scrivere in init() e meglio non così

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

e poi in start()

tp = High[3]+TP*point;
Motivazione: