Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 66

 
mario065:

Ciao,

Certo che no.

Se c'è più di un tacchino, devi fare tante coppie per ognuno di loro quante ne mangia.

Un gestore per utilizzare tutte le coppie.

Usa un handle uno per uno, cioè copia i buffer degli indicatori e poi assegna il valore dell'indicatore successivo all'handle.

Ma non capisco perché avete bisogno di risparmiare sulle maniglie quando sono interi elementari e non hanno quasi nessun effetto sulle risorse?

 
Reshetov:

Usate gli handle uno per uno, cioè copiate i buffer degli indicatori e poi assegnate il valore dell'indicatore successivo all'handle.

Ma non capisco perché avete bisogno di risparmiare sulle maniglie quando sono interi elementari e non hanno praticamente alcun effetto sulle risorse?

Ciao a tutti.

L'anno scorso ho scritto una funzione esterna come questa:

void CalculatePairs(string dSymbol) {

   atrHandle1=iATR(dSymbol, TimeFrame1, ATRPeriod);
   atrHandle2=iATR(dSymbol, TimeFrame5, ATRPeriod);
   atrHandle3=iATR(dSymbol, TimeFrame15, ATRPeriod);
   atrHandle4=iATR(dSymbol, TimeFrame30, ATRPeriod);
   atrHandle5=iATR(dSymbol, TimeFrame60, ATRPeriod);
   muvHandle1=iMA(dSymbol,TimeFrame1,MAPeriod,0,MAMethod,InpPr);
   muvHandle2=iMA(dSymbol,TimeFrame5,MAPeriod,0,MAMethod,InpPr);
   muvHandle3=iMA(dSymbol,TimeFrame15,MAPeriod,0,MAMethod,InpPr);
   muvHandle4=iMA(dSymbol,TimeFrame30,MAPeriod,0,MAMethod,InpPr);
   muvHandle5=iMA(dSymbol,TimeFrame60,MAPeriod,0,MAMethod,InpPr);
   if(atrHandle1<0 || atrHandle2<0 || atrHandle3<0 || atrHandle4<0 || atrHandle5<0 ||
   muvHandle1<0 || muvHandle2<0 || muvHandle3<0 || muvHandle4<0 || muvHandle5<0 )
     {
      Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
     }

   double ma1[],ma2[],ma3[],ma4[],ma5[];
   double atr1[],atr2[],atr3[],atr4[],atr5[];

   ArraySetAsSeries(ma1, true);ArraySetAsSeries(ma2, true);ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);ArraySetAsSeries(ma5, true);
   ArraySetAsSeries(atr1, true);ArraySetAsSeries(atr2, true);ArraySetAsSeries(atr3, true);
   ArraySetAsSeries(atr4, true);ArraySetAsSeries(atr5, true);

   if (NormalizeDouble(CopyBuffer(muvHandle1,0,0,1,ma1),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle2,0,0,1,ma2),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle3,0,0,1,ma3),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle4,0,0,1,ma4),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(muvHandle5,0,0,1,ma5),4) < 0){Print("CopyBuffermuvHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle1,0,0,1,atr1),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle2,0,0,1,atr2),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle3,0,0,1,atr3),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle4,0,0,1,atr4),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}
   if (NormalizeDouble(CopyBuffer(atrHandle5,0,0,1,atr5),4) < 0){Print("CopyBufferatrHandle error =",GetLastError());}

   Result = 0;
}
double FGroup(){
      CalculatePairs(Currency1);{
         Pair1 = Result;}

Naturalmente, finché non ha fatto i calcoli ha dato errore 4806, ma poi funziona bene.

Oggi ho aperto questo codice e mi sono chiesto se c'è un altro modo.

Un errore è un errore.

Quante mani dovrei avere per 8 coppie e 5 timeframes?

Questa non è una questione di risorse, devo fare qualcosa di meglio.

Документация по MQL5: Основы языка / Функции / Описание внешних функций
Документация по MQL5: Основы языка / Функции / Описание внешних функций
  • www.mql5.com
Основы языка / Функции / Описание внешних функций - Документация по MQL5
 
mario065:

Ciao a tutti.

L'anno scorso ho scritto una funzione esterna come questa:

Naturalmente, finché non ha fatto i calcoli, ha dato errore 4806, ma poi funziona bene.

Ho aperto questo codice oggi e mi sono chiesto se c'è un altro modo.

  1. Un modo di cosa?
  2. Perché ho bisogno della funzione CalculatePairs() se non mostra altro che errori?

Rimuovete proprio questa funzione dal vostro codice e dormite bene.

 
Reshetov:
  1. La via di cosa?
  2. Perché avete bisogno della funzione CalculatePairs() se non produce altro che errori?

Rimuovete proprio questa funzione dal vostro codice e dormite bene.

Ci sono alcuni "grandi" calcoli che non sono mostrati.

Poi altre funzioni prendono la coppia selezionata e fanno ancora qualcosa.

Il metodo è semplice.

Per esempio:

Facciamo un manico dell'indicatore, non ha simbolo, timeframe.

Quando creiamo un CopyBuffer, indichiamo il timeframe e la coppia.

Per esempio:

int OnInit()

Si presenta così: Handle = nome dell'indicatore

void OnTick()

Sarebbe così: CopyBuffer(simbolo specificato, timeframe, copia da, quanto copiare, dove copiare)

Questo è solo un dialogo :) con voi.

 
mario065:

Ci sono alcuni "grandi" calcoli che non sono stati mostrati.

Capisco. Tu hai ArraySetSeries() applicata agli array senza dati, cioè prima che le informazioni siano caricate in essi, mentre tu ne hai bisogno dopo aver copiato i buffer.
 
Reshetov:
Capisco. Avete ArraySetSeries() applicato agli array senza dati, cioè prima che le informazioni siano state caricate in essi, mentre dovrebbe essere fatto dopo la copia dei buffer.

Esattamente.

Ma penso che sarà più facile per tutti se viene fatto in CopyBuffer - cioè si specifica lì quale coppia e frame.

L'indicatore stesso fa lo stesso calcolo, se solo si specifica quale coppia e quadro.

Se l'architettura stessa di MT5 permette di farlo più facilmente.

Buona idea :) .

 
Reshetov:
Capisco. Tu hai ArraySetSeries() applicato agli array senza dati, cioè prima che le informazioni siano state caricate in essi, mentre tu lo vuoi dopo aver copiato i buffer.
Nessuna differenza.
 
ho tipo configurato tutto, firmato tutto, fatto le impostazioni nel terminale, ma non voglio commerciare automaticamente. quando provo a piazzare un ordine pendente, si installa e mi scrive sulla sincronizzazione e cancella tutti gli ordini nel terminale, e poi vedo gli ordini del fornitore. cosa devo fare?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Yedelkin:

Se l'Expert Advisor usa MFI, allora il suo codice deve contenere una linea con l'ottenimento dell'handle di questo indicatore:"MQL5 Reference / Technical Indicators / iMFI ". Di conseguenza, la gestione dell'indicatore di media mobile è descritta qui:"MQL5 Reference Guide / Technical Indicators / iMA ".

Prova anche a leggere l'articolo"Indicatore per indicatore in MQL5".

Ho letto l'articolo. Tuttavia, non ha risposto alla mia domanda "Come posso rimuovere le maniglie iMA situate nella finestra dell'indicatore MFI e registrare il prezzo di chiusura della barra?

La maniglia iMA che hai menzionato non si applica alla iMA situata nella finestra dell'indicatore. Descrizione con il metodo standard il consulente rimuove l'handle iMA dal grafico.
 
Leser: Leggi l'articolo. Tuttavia, non ha risposto alla mia domanda "Come faccio a rimuovere le maniglie dell'iMA situate nella finestra dell'indicatore MFI e registrando il prezzo di chiusura della barra?

All'inizio hai delineato il problema come segue: "L'Expert Advisor usa MFI; Ma non è sul grafico (finestra #1), ma nella finestra con l'indicatore MFI (finestra #2)". Ho risposto:"Se il tuo Expert Advisor usa MFI, allora il suo codice deve contenere una linea con l'handle di questo indicatore: "MQL5 Reference Guide / Technical Indicators / iMFI" .

Pertanto, suggerisco di iniziare a capire come esattamente il vostro Expert Advisor ottiene la gestione dell'indicatore dalla "finestra #2". E lì penseremo a qualcosa.

Leser : Ho letto l'articolo. Tuttavia, non risponde alla mia domanda ". iMA situato nella finestra dell'indicatore MFI e registrando il prezzo di chiusura della barra".
Una domanda chiarificatrice: su quali dati costruisci l'indicatore MA: sui valori dell'indicatore MFI o sui prezzi di chiusura delle barre? Non è stato detto nulla prima di "registrare i prezzi di chiusura dei bar". Ecco perché ho fornito un link all'articolo "Indicatore da Indicatore".
Motivazione: