[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 27

 
Code:


Ok, proviamo un altro modo di vedere la cosa.

vteor12 può essere scritto come (dVolume+vback1)/k1 (fattore 1)

vrealUP12 può essere scritto come (dVolume+vback1)/k2 (coefficiente 2)

Come ho cercato di descrivere l'ideologia dell'indicatore, essa consiste nel confronto di alcuni livelli teorici e reali. Per ottenere questi livelli, confronto (cioè divido) lo stesso valore (dVolume+vback1) con alcuni valori teorici (k1) e reali (k2). È chiaro che k1 sto solo inventando, per mettere le cose nei loro nomi propri. O, se volete, fare una supposizione. Ora questo deve essere paragonato a qualcosa. Niente è più oggettivo e vero del grafico stesso in questo caso. Quindi prendo le differenze di apertura e di chiusura, prendendole come linea di fondo di un dato periodo di tempo. E l'unico compito qui è quello di portarlo alla stessa cifra, che è il motivo per cui viene moltiplicato per 1000.

Provate a calcolare diverse varianti di candelieri vicini su una calcolatrice e sarete sorpresi dalla varietà dei risultati secondo questa formula molto semplice.

E in termini di logica scolastica hai ragione. Aggiungo Volume + Volume/Prezzo, non puoi farlo a scuola. :))

Io passo... :)))

Non avevi inizialmente un problema con il display? L'hai risolto?

 
MaxZ:

Io passo... :)))

Non avevi inizialmente un problema con il display? L'hai risolto?


Sì, l'ho fatto, a proposito. Non ho tenuto conto che era una linea, non un istogramma. La linea dovrebbe avere 2 punti. Poiché il codice non descrive tutte le varianti, ma solo 2 candele in aumento di fila, nel caso in cui dopo la seconda candela in aumento c'era una candela al ribasso, l'indicatore non ha disegnato nulla. Ed era giusto. Quando l'ho capito, l'ho modificato in un istogramma.

A proposito, non prendete a cuore il mio ragionamento sulle regole dell'addizione e della sottrazione. :)))

E vi sarei molto grato se poteste aiutarmi a continuare il codice. Era proprio l'inizio. Dopo due candele di fila, vorrei contare 3, 4 ecc. candele di fila secondo lo stesso principio. A quanto pare, il codice dovrebbe essere in loop, con la ricerca di candele, giusto? Non posso ancora farlo. Ma non fatevi problemi su cosa è diviso da cosa. :)))

 

Portato da

VladimirR 29.07.2011 23:02 am Correzione | cancellazione

Salve. Finalmente ho scritto il mio primo EA! Non capisco bene come funziona. L'EA imposta 2 ordini in sospeso quando si verificano determinate condizioni. Lo stop loss per entrambi gli ordini è uguale a High[1] (Low[1]) per l'ordine pendente di vendita (acquisto) e il take profit è sempre uguale ai pip per lo stop loss. Ho notato nel tester della strategia che il profitto non è sempre uguale allo stop loss in pip. Questo è il codice dove vengono calcolati gli ordini di stop (non c'è un altro posto nel programma dove vengono modificati gli stop)

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
Ciao, potresti dirmi, per favore, è possibile assegnare valori a più variabili globali all'interno di una funzione, e dove devono essere dichiarate queste variabili in questo caso?

È possibile.

Dichiarare le variabili globalmente - prima della funzione start(). All'interno delle funzioni EA, cambiate i loro valori come volete - dopo il ritorno dalla funzione, queste variabili avranno i valori che avete assegnato loro all'interno delle vostre funzioni fino a quando non li cambierete di nuovo da qualche parte.

 
nadya:
buon pomeriggio! potreste dirmi se è possibile assegnare un valore a più variabili globali all'interno di una funzione, e dove devono essere dichiarate queste variabili in questo caso?

Esempio. All'interno della funzione my, assegniamo un valore a due variabili globali. Si può anche assegnare un valore a tre, quattro o n variabili in questo modo.

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

Ma credo che ci sia un tranello nella tua domanda...

 
Code:


Sì, a proposito, l'ho risolto da solo. Non ho tenuto conto che è una linea, non un istogramma. E la linea richiede 2 punti. Poiché il codice non descrive tutte le varianti, ma solo 2 candele in aumento di fila, nel caso in cui dopo la seconda candela in aumento c'era una candela al ribasso, l'indicatore non ha disegnato nulla. Ed era giusto. Quando l'ho capito, l'ho convertito in un istogramma.

Tu, a proposito, non prendere a cuore il mio ragionamento sulle regole dell'addizione e della sottrazione, pensalo come un esperimento. :)))

E vi sarei molto grato se poteste aiutarmi a continuare il codice. Era proprio l'inizio. Dopo due candelieri di fila, vorrei contare 3, 4 ecc. candelieri di fila secondo lo stesso principio. A quanto pare, il codice dovrebbe essere in loop, con la ricerca di candele, giusto? Non posso ancora farlo. Ma non fatevi problemi su cosa è diviso da cosa. :)))

Sì, ma il modo migliore per risolvere questo problema è usare un ciclo con precondizione "while" invece di un ciclo con contatore "for". Perché non sapete quante candele rialziste o ribassiste incontrerete di seguito.

Inizia con un problema più semplice, se lo trovi così difficile. Per esempio, visualizzare i numeri da a a b in incrementi di s. O trovare il fattoriale di n con un ciclo.

E per fare pratica, risolvete questi problemi usando entrambi i tipi di loop ("for" e "while"). Allora puoi iniziare a migliorare il tuo indicatore.

 

Non ci sono cicli post-while nel linguaggio, MaxZ.

Il tuo desiderio di aiutare gli altri è lodevole, ma hai ancora bisogno di conoscere meglio la lingua.

 
Mathemat:
Non ci sono cicli post-while nel linguaggio.

Se organizzate il ciclo come segue, otterrete la giusta postcondizione:

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

Ma accetto la sua correzione. Grazie. Poiché ci sono effettivamente due tipi di loop in MQL4: "for" (con un contatore) e "while" (con una precondizione). Il terzo tipo (con una postcondizione) può essere organizzato solo intenzionalmente.


Matematica:

Il tuo desiderio di aiutare gli altri è lodevole, ma hai ancora bisogno di conoscere meglio la lingua.

Quello che non so, non ci vado.

E tutti gli altri errori sono stati fatti inavvertitamente. Sono stato distratto ultimamente... Voglio solo aiutare le persone.

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

Molto probabilmente, questa funzione non è modellata nel tester (non ho controllato). Soprattutto perché exact (il quarto parametro della funzione) è impostato su false per default.
 
Mathemat:
Molto probabilmente, questa funzione non è modellata nel tester (non ho controllato). Soprattutto perché exact (il quarto parametro della funzione) è impostato su false per default.
L'ho già capito... Il problema era la storia. Non c'era nessuna storia di barre M1 per il periodo in esame.
Motivazione: