Errori, bug, domande - pagina 355

 
È sempre lo stesso per gli agenti come sul computer principale?
 
dimonsky:
Gli agenti hanno sempre la stessa storia del computer principale?
L'idea è sì, ma ci sono problemi con la sincronizzazione della storia e alcune altre cose.
 

Non ho letto tutto il thread, quindi scusatemi se è già successo.

1. sarà possibile scegliere un'ora (da non confondere con una data) per iniziare e fermare i test.

2. Come nel tester per visualizzare gli scambi su altre coppie, tranne impostato nelle impostazioni (per multicurrency - per uno strumento - "grafico aperto" nei risultati del test, e per gli altri).

 
Retsam:

Non ho letto tutto il thread, quindi scusatemi se è già successo.

1. sarà possibile scegliere un'ora (da non confondere con una data) per iniziare e fermare i test.

2. Come nel tester per visualizzare le offerte su altre coppie, tranne impostato nelle impostazioni (per multicurrency - per uno strumento - "grafico aperto" nei risultati dei test, e per altri).

1 Non c'è questa funzione - a meno che non si chieda di farlo.

2 Inoltre non esiste una cosa del genere,

 

Buon pomeriggio!

MT 5.425 Windows 7 x64

Avvio l'indicatore in una sottofinestra (sottofinestra 1), ci metto un grafico usando un buffer. Voglio ottenere il prezzo minimo e massimo della finestra con ChartGetDouble(0,CHART_PRICE_MAX,1) e ChartGetDouble(0,CHART_PRICE_MIN,1), rispettivamente.

L'output è 0, il minimo e il massimo della finestra principale sono mostrati correttamente (ChartGetDouble(0,CHART_PRICE_MAX) ChartGetDouble(0,CHART_PRICE_MIN)). ChartRedraw(0) non funziona. Se il grafico inizia a scorrere con il mouse, i valori muoiono - inizia a visualizzare correttamente.

Questo succede quando lo avvio per la prima volta, o quando cambio i valori nelle proprietà dell'indicatore.

Forse è un errore, o forse sto facendo qualcosa di sbagliato.

Qual è il significato di questa voce nel file di aiuto?

CHART_PRICE_MINModificatore minimo deldoppio r/o del grafico- numero di sottofinestra

CHART_PRICE_MAX Massimo del graficodoppio modificatore r/o - numero disottofinestra

Grazie!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Tutte le finestre del grafico sono numerate a partire da zero. 0 - finestra principale del grafico, 1 - finestra del primo indicatore, che viene mostrato in una finestra separata. E così via.
 

Non riesco a capire cosa c'è che non va:

se i parametri di due indicatori sono gli stessi, allora l'EA apre solo un Buy, ma se i parametri sono diversi, allora non è chiaro come chiude la posizione......

In teoria, dovrebbe chiudere gli scambi con il secondo indicatore, ma non è così. Il codice stesso:

#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
MqlRates mrate[];

input int TriX_PARAM=14;
input int TriX_PARAM_Close=50;

double TriX[];
double TriX_Close[];
int TriXHandle;
int TriXHandle_Close;

int OnInit()
  {

   TriXHandle=iTriX(Symbol(),PERIOD_CURRENT,TriX_PARAM,PRICE_WEIGHTED);
   TriXHandle_Close=iTriX(Symbol(),PERIOD_CURRENT,TriX_PARAM_Close,PRICE_WEIGHTED);
   return(0);
  }

void OnTick()
  {
   CTrade mytrade;
   CPositionInfo myposition;
   CSymbolInfo mysymbol;
   COrderInfo myorder;

   bool Sell_opened,Buy_opened;
   if(myposition.Select(_Symbol)==true) { if(myposition.Type()==POSITION_TYPE_BUY) Buy_opened=true;  if(myposition.Type()==POSITION_TYPE_SELL) Sell_opened=true;}

//Закрываем позицию
   if(Buy_opened==true || Sell_opened==true)
     {
      ArraySetAsSeries(TriX_Close,true);
      CopyBuffer(TriXHandle_Close,0,0,4,TriX_Close);

      if(Sell_opened=true && TriX_Close[1]>TriX_Close[2] && TriX_Close[2]<TriX_Close[3]) mytrade.PositionClose(_Symbol);
      if(Buy_opened=true && TriX_Close[1]<TriX_Close[2] && TriX_Close[2]>TriX_Close[3]) mytrade.PositionClose(_Symbol);

     }

//Открываем позицию
   if(Buy_opened==false && Sell_opened==false)
     {
      ArraySetAsSeries(TriX,true);
      CopyBuffer(TriXHandle,0,0,4,TriX);
      
      if(TriX[1]>TriX[2] && TriX[2]<TriX[3]) mytrade.Buy(0.1,_Symbol,NormalizeDouble(mysymbol.Ask(),_Digits),0,0);
      if(TriX[1]<TriX[2] && TriX[2]>TriX[3]) mytrade.Sell(0.1,_Symbol,NormalizeDouble(mysymbol.Bid(),_Digits),0,0);

     }
  }
 
Posso fare in modo che il terminale non si aggiorni durante l'ottimizzazione?
 
Jager:
È possibile impedire l'aggiornamento del terminale durante l'ottimizzazione?

Quindi se il terminale è in funzione e non si è aggiornato per 5-10 minuti,

Non sarà aggiornato e anche se lo è, le nuove impostazioni non saranno salvate.

Prima di riavviare il terminale, potete naturalmente spegnere Internet

 
Mr.FreeMan:

Non riesco a capire cosa c'è che non va:

se due indicatori hanno gli stessi parametri, allora l'EA apre solo Buy, e se i parametri sono diversi, allora non è chiaro come chiude le posizioni......

In teoria, dovrebbe chiudere gli scambi con il secondo indicatore, ma non è così. Il codice stesso:

Il codice stesso: all'inizio, è necessario contrassegnare gli array in modo diverso.

che è meglio). cambiarlo:

CopyBuffer(TriXHandle_Close,0,0,3,TriX_Close);
CopyBuffer(TriXHandle,0,0,4,TriX);

su queste linee

CopyBuffer(TriXHandle_Close,0,0,3,TriX_Close);
CopyBuffer(TriXHandle,0,0,3,TriX);

Cambia anche

 if(Sell_opened=true && TriX_Close[1]>TriX_Close[2] && TriX_Close[2]<TriX_Close[3]) mytrade.PositionClose(_Symbol);
 if(Buy_opened=true && TriX_Close[1]<TriX_Close[2] && TriX_Close[2]>TriX_Close[3]) mytrade.PositionClose(_Symbol);
      if(TriX[1]>TriX[2] && TriX[2]<TriX[3]) mytrade.Buy(0.1,_Symbol,NormalizeDouble(mysymbol.Ask(),_Digits),0,0);
      if(TriX[1]<TriX[2] && TriX[2]>TriX[3]) mytrade.Sell(0.1,_Symbol,NormalizeDouble(mysymbol.Bid(),_Digits),0,0);

a questo.

 if(Sell_opened=true && TriX_Close[0]>TriX_Close[1] && TriX_Close[1]<TriX_Close[2]) mytrade.PositionClose(_Symbol);
 if(Buy_opened=true && TriX_Close[0]<TriX_Close[1] && TriX_Close[1]>TriX_Close[2]) mytrade.PositionClose(_Symbol);
      if(TriX[0]>TriX[1] && TriX[1]<TriX[2]) mytrade.Buy(0.1,_Symbol,NormalizeDouble(mysymbol.Ask(),_Digits),0,0);
      if(TriX[0]<TriX[1] && TriX[1]>TriX[2]) mytrade.Sell(0.1,_Symbol,NormalizeDouble(mysymbol.Bid(),_Digits),0,0);