Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1280

 

Ciao a tutti!

1) Compilato l'EA.

2) Eseguirlo nel tester.

3) Ci sono tre voci nel registro:

2020.10.25 20:06:08.484 2020.09.24 00:00:00 OVERLOAD test avviato

2020.10.25 20:06:07.015 TestGenerator: corrente spread 7 usato
2020.10.25 20:05:51.296 Expert UPDATE GBPUSD,M1: caricato con successo


4)La visualizzazione rimane al suo posto.

Qualunque sia l'errore logico commesso, le transazioni non saranno eseguite, per esempio, ma il tester dovrebbe iniziare a contare le barre. Ma il grafico si blocca e rimane fermo.

Ho provato diversi altri Expert Advisor e funzionano tutti.

Quando eseguo questo, tutto si ferma.

Qualcuno ha avuto un tale problema? Come risolvere il problema?

 
Andrey Ilinykh:

Se si scrivono i valori calcolati in un registro o in un file, come può essere utile?

Trova l'errore, forma un algoritmo.

 
Alexey Viktorov:

Beh, si può calcolare l'angolo con una tangente. E non c'è bisogno di un angolo in sé, ma solo di una tangente.

La tangente è in ogni caso un chilometro all'ora o un punto per miglio o mille punti al giorno e questa è la velocità. La dimensionalità del grafico. e la tangente su di esso è l'angolo legato alle dimensioni di ordinata e ascissa. Questo è il punto di partenza.

 
Aleksei Stepanenko:

Sì, di nuovo la velocità è solo unità: pip al minuto. Per quanto riguarda i fine settimana e i buchi, ho deciso: quello che le candele sono sul grafico è l'intervallo di tempo, e quello che non lo è (giorni/ore), non esiste. Perché se prendiamo in considerazione i fine settimana, e il prezzo sta fermo in quel momento, la velocità diminuirà notevolmente senza alcuna ragione. Ma d'altronde, a ciascuno il suo :)

Perché temere la velocità. È solo una convenzione per dare dei tipi.
Come variante della funzione di definizione degli angoli:

struct PointPriceTime
  {
   double            price;
   datetime          time;
                     PointPriceTime(double p, datetime t) { price=p; time=t; };
   void              Set(double p, datetime t){ price=p; time=t;};
                     PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
                     PointPriceTime() { price=0.0; time=0; };
  };

double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X 
  {                                                 // расстояние между x1 и  x2  = N*_Point, где N - количество минутных баров во временном промежутке отрезка. 
   static int tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
   int i=0;
   while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
      i++;
   if(i==9)
     {
      Print("Время левой границы вне диапазона исторических данных");
      return DBL_MAX;
     }
   int bar1 = iBarShift(_Symbol,tf[i],p1.time);
   int bar2 = iBarShift(_Symbol,tf[i],p2.time);
   if(bar1==bar2)
      return 0.0;
   return atan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
  }

Dopo MT5 la sensazione di MT4 è semplicemente terribile. L'accesso alla storia è in qualche modo evirato. Non sto nemmeno parlando delle zecche.



File:
Angle.mq4  11 kb
iCanvas.mqh  49 kb
 

Si prega di avvisare se c'è la possibilità di gestire programmaticamente la visualizzazione delle descrizioni dei livelli di scambio sul grafico. È possibile disabilitarli usando gli strumenti MQL4 (lasciando i livelli di trading sul grafico) o cambiarli?


Ho bisogno di marcare visivamente alcuni livelli di trading fornendo loro le proprie descrizioni. Per questo creo delle linee orizzontali che sono simili nello stile ai livelli di scambio ma differiscono nel colore. Imposto una descrizione per loro (OBJPROP_TEXT) e abilito la visualizzazione delle descrizioni degli oggetti sul grafico (ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true)). In questo caso, la descrizione che ho creato si sovrappone a ciò che è mostrato nello screenshot e di conseguenza nessuno dei due è leggibile.

È possibile disattivare o cambiare le descrizioni dei livelli di trading creati dal terminale? Queste descrizioni sono accessibili dal programma MQL?

 
Janis Ozols:

Si prega di avvisare se c'è la possibilità di gestire programmaticamente la visualizzazione delle descrizioni dei livelli di scambio sul grafico. È possibile disabilitarli usando gli strumenti MQL4 (lasciando i livelli di trading sul grafico) o cambiarli?


Ho bisogno di marcare visivamente alcuni livelli di trading fornendo loro le proprie descrizioni. Per questo creo delle linee orizzontali che sono simili nello stile ai livelli di scambio ma differiscono nel colore. Imposto una descrizione per loro (OBJPROP_TEXT) e abilito la visualizzazione delle descrizioni degli oggetti sul grafico (ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true)). In questo caso, la descrizione che ho creato si sovrappone a ciò che è mostrato nello screenshot e di conseguenza nessuno dei due è leggibile.

È possibile disattivare o cambiare le descrizioni dei livelli di trading creati dal terminale? Queste descrizioni sono accessibili dall'interno del programma MQL?

Sì, c'è,

deselezionare la casella di controllo.

1

 
Alekseu Fedotov:

È possibile,
deselezionare la casella.

Se si deseleziona questa casella, i livelli di trading (linee) scompaiono dal grafico insieme alle loro descrizioni.

Facendo la domanda, stavo cercando di sottolineare che non voglio rimuovere le linee, ho solo bisogno di cambiare o eliminare le loro descrizioni dal grafico (mostrate dalle frecce nello screenshot).

 
Janis Ozols:

Se si deseleziona questa casella, i livelli di trading(linee) spariscono dal grafico insieme alle loro descrizioni.

Facendo la domanda, stavo cercando di sottolineare che non voglio rimuovere le linee, ho solo bisogno di cambiare o eliminare le loro descrizioni dal grafico (mostrate dalle frecce nello screenshot).

Non ne avete bisogno, create le vostre linee su quei posti

 
Vitaly Muzichenko:

Non ne avete bisogno, create le vostre linee in quei posti.

Voglio solo evidenziare alcuni dei livelli esistenti(per l'esempio mostrato nello screenshot, quello più in alto), e lasciare gli altri come sono.

Se è impossibile accedere alle descrizioni di questi livelli programmaticamente, allora probabilmente dovremo disabilitare i livelli stessi e poi ad ogni spunta sondare il terminale per disegnarli indipendentemente evidenziando i livelli appropriati in un altro colore e fornendo loro una descrizione diversa. E non ci sono solo livelli aperti, ma anche stop-loss e take-profits che devono essere disegnati.

Forse c'è un modo più banale per disabilitare la descrizione dei livelli di trading (lasciando solo le linee) o cambiarle?

 

Puoi spiegare in un linguaggio semplice qual è la differenza tra queste funzioni?

//+------------------------------------------------------------------+
int    CountOrder(int Order_Type) 
   {
    int Orders=0;
    for(int a=OrdersTotal()-1;a>=0;a--)
    {
     if(OrderSelect(a, SELECT_BY_POS, MODE_TRADES)==false) continue;
     if(OrderSymbol()!=_Symbol) continue;
     if(Order_Type == OrderType() || Order_Type == -1) Orders++;
    }
    return Orders;
   }
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderSymbol()==_Symbol)
            if(OrderType()==order_type)
               cnt++;
   return (cnt);
  }
//+------------------------------------------------------------------+