[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 647

 
Mathers:

giusto.
 
Ho trovato un codice interessante per la costruzione di una linea di tendenza e ho deciso di giocarci un po' - che avrebbe disegnato la linea di tendenza non in punti, ma in percentuale, ma per qualche motivo - dopo il mio completamento la torretta smette di disegnare la storia - solo le ultime tre barre (o meglio se si esegue la torretta, la linea di tendenza che disegna dall'inizio normale, ma una volta che si clicca per aggiornare la torretta -OK proprietà resetta la storia). Cosa ho fatto di male?
Ho disegnato il codice qui sotto. Qualcuno può dirmi qual è il problema - il frammento che ho messo in grassetto?
Il problema è che l'indicatore disegna la storia all'indietro immediatamente e non la resetta dopo aver cambiato i parametri.
#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#property indicator_color1 LimeGreen

doppio AUD;

extern int PerAvr=5,Delta=1;
doppio Idx[];
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(0,Idx);

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'indicatore Custor
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
for(int i=limite; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta) ;

//if (Curency =="AUDUSD")
Idx[i] = AUD;



}

//----

//----
ritorno(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
Buon pomeriggio, membri del forum. Ho trovato un codice interessante per costruire una linea di tendenza e ho deciso di giocarci un po'.

Per qualche motivo mi è venuto in mente un aneddoto: in una famiglia di un programmatore, un figlio si avvicina al padre e chiede perché il sole sorge a est e tramonta a ovest.

Papà, senza distogliere gli occhi dal suo computer, sorge davvero a est? -Sì. E tramonta a ovest? - Sì. Quindi, cosa, ogni giorno? - Sì. Beh, non toccare nulla se funziona.

 
Roger:

Per qualche motivo mi è venuto in mente un aneddoto: in una famiglia di un programmatore, un figlio si avvicina al padre e chiede perché il sole sorge a est e tramonta a ovest.

Papà, senza distogliere gli occhi dal suo computer, sorge davvero a est? -Sì. E tramonta a ovest? - Sì. Quindi, cosa, ogni giorno? - Sì. Beh, non devi toccare niente se funziona.

:))
 
Lonely_man:
Ciao utenti del forum, ho trovato un codice interessante per disegnare la linea di tendenza.

Sai cos'è divertente: hai cambiato il codice secondo i tuoi principi e vuoi una brigata di studiosi per trovare i difetti

e tu provi solo ad emettere le informazioni che vuoi ottenere nel commento? è possibile che tutto funzioni ma tu ottieni i dati che non sono visualizzati al prezzo corrente ma da qualche parte nella parte inferiore del grafico - penso che sia il separatetwinds

SZS buona fortuna

 
IgorM:

Sai cos'è divertente: hai cambiato il codice secondo i tuoi principi e vuoi una brigata di studiosi per trovare i difetti

e tu provi solo ad emettere le informazioni che vuoi ottenere nel commento? è possibile che tutto funzioni ma tu ottieni i dati che non sono visualizzati al prezzo corrente ma da qualche parte nella parte inferiore del grafico - penso che sia il separatetwinds

SZS buona fortuna

So del separatore - lo so, è in una finestra separata, non c'entra. Non riesco a capire cosa succederà con questo codice - apparentemente questo metodo di calcolo non funziona per gli interessi(((.

Immediatamente, per qualche motivo mi viene in mente una barzelletta: il figlio di un programmatore va da suo padre e chiede perché il sole sorge a est e tramonta a ovest?

Papà, senza distogliere gli occhi dal suo computer, sorge davvero a est? -Sì. E tramonta a ovest? - Sì. Quindi, cosa, ogni giorno? - Sì. Beh, non devi toccare niente se funziona.

))) Un suggerimento: ne ho bisogno per il cross currency trading - il cambiamento in pip contro il dollaro del GBP o del JPY non danno informazioni complete su quale dei due è sceso di prezzo contro l'altro, ma il loro cambiamento percentuale contro il dollaro mostra tutto chiaramente - come strumento aggiuntivo è una cosa molto utile.
 
Mathers:
Grazie. Immagino che l'unica differenza sia che l'EA viene lanciato ogni volta che arriva un nuovo tick, mentre lo script deve essere lanciato in loop infinito per tenerlo in esecuzione?


Non necessariamente. Tutto dipende dallo scopo della sceneggiatura. Se lo scopo dello script è quello di una corsa unica (che è la stragrande maggioranza), non c'è bisogno di inventare cicli infiniti. La necessità di calcolare la quantità di denaro che sarà utilizzata nel mercato quando si apre una posizione con un lotto predeterminato può servire come esempio di un tale script una tantum. Poiché il prezzo del punto al lotto minimo è diverso per i diversi strumenti, è più facile aprire lo strumento richiesto, applicare lo script ad esso, inserire il lotto previsto nella finestra dei parametri e vedere quanto denaro sarà bloccato se il trade è aperto.

Questo è solo un esempio. Lo scopo degli script può essere diverso.

 
Lonely_man:

Sono consapevole della separazione, è in una finestra separata, non si tratta di questo. Non vedo come questo codice funzionerà - apparentemente questo metodo di calcolo della percentuale non funziona((.

Immediatamente, per qualche motivo mi viene in mente una barzelletta: un figlio in una famiglia di un programmatore viene da suo padre e chiede perché il sole sorge a est e tramonta a ovest?

Papà, senza distogliere gli occhi dal suo computer, sorge davvero a est? -Sì. E tramonta a ovest? - Sì. Quindi, cosa, ogni giorno? - Sì. Beh, non devi toccare niente se funziona.

))) Il suggerimento: ne ho bisogno per il trading di valute incrociate - i pip al dollaro per GBP o JPY non danno informazioni complete su quale di loro è sceso di prezzo contro l'altro, ma il loro cambiamento percentuale contro USD mostra tutto chiaramente - come un indicatore aggiuntivo è una cosa molto utile.

È un indicatore abbastanza semplice, non vedo come le percentuali siano migliori dei pip, ma non importa.

Hai fatto qualche errore, però :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

Per calcolare correttamente la percentuale è necessario aggiungere le parentesi.

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


Il problema è che l'indicatore disegna la storia all'indietro immediatamente e non la resetta dopo aver cambiato i parametri.

La cosa più interessante è che ha svegliato l'interesse sportivo e si è seduto per mezz'ora sul tuo indicatore.

Perché la storia non è stata calcolata?
La risposta è che avete aggiunto un'operazione di divisione.

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

Il fatto che la funzione iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta) restituisca 0 all'inizio della storia non è stato preso in considerazione. E sei stato "buttato fuori" con l'errore 4013 (ERR_ZERO_DIVIDE) quando hai provato a dividere per 0, controlla il log.

Si può aggiungere un altro controllo nel ciclo FOR.

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

E tutto andrà bene. Di seguito la mia variante.

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#property indicator_color1 White

È possibile cambiare questo parametro programmaticamente nel modulo start(),

cioè è possibile cambiare il colore impostato per il buffer mentre il programma procede?



 
valenok2003:

#property indicator_color1 White

È possibile cambiare questo parametro programmaticamente nel modulo start(),

cioè è possibile cambiare il colore impostato per il buffer mentre il programma procede?




Non credo. E perché dovrebbe esserlo?
Motivazione: