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

 
deyron:
Salve. Puoi dirmi per favore se un EA è collegato a diverse finestre di coppie di valute contemporaneamente, allora i cambiamenti nell'EA in una finestra influenzano l'EA in un'altra finestra??? cioè le variabili locali cambiano o no???


Se cambiate il magik per lo stesso EA, allora gli EA lavoreranno separatamente ognuno nella propria finestra.

 

HO DAVVERO BISOGNO DI AIUTO PER RIPROGETTARE IL MIO EA!!!

Sono contento di tutto quello che c'è dentro, vorrei solo poter.... Se non è possibile tradurre un affare a pareggio o chiudere a take profit, allora chiudetelo al contrario di un nuovo segnale di apertura senza cambiare la strategia di trading. Per esempio, se l'affare Sell si è girato e Owls non l'ha trasferito a Breakeven, inizia una nuova candela per aprire un affare Sell con volume crescente sperando in un pullback, e voglio che continui a lavorare come se avesse chiuso l'affare allo Stop Loss/Take... se il prezzo si inverte, apre buy, e chiude quello, anche se con un grande minus.... Come questo

/*decompilato cancellato*/

 
deyron:
Salve. Puoi per favore consigliarmi se un EA è collegato a diverse finestre di coppie di valute, allora i cambiamenti nell'EA in una finestra influenzano l'EA in un'altra finestra??? cioè le variabili locali cambiano o no???
No, non si influenzano a vicenda. La stessa magia della posizione può essere dannosa solo quando l'EA determina la chiusura della posizione solo per magia.
 

Buona giornata a tutti. Per favore, aiutatemi a capire le variabili globali. Il problema è qualcosa del genere: ho una variabile bool line_1=false; cambia in vero; quando si raggiunge un prezzo e fare livelli di raggiungimento che saranno altre azioni e bool line_1 diventa di nuovo falso; ho bisogno di riavviare il sistema o i parametri non saranno raggiunti il venerdì sera, i valori di questa variabile sono persi e influenzeranno il risultato del trading, come ho capito ho bisogno di renderli variabili globali bool. non ho ancora fatto nulla al riguardo e ho bisogno del vostro consiglio se penso di fare correzioni nel codice, per favore ditemi se qualcosa deve essere fatto, grazie.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Se il codice è costruito in questo modo, allora quando si riavvia il terminale, la variabile lascerà il suo valore precedente al momento del riavvio o sarà riportata allo stato dichiarato all'inizio del programma? Grazie ancora!

 
paladin80:
No, non si influenzano a vicenda. La stessa magia della posizione può essere dannosa solo quando l'EA determina la chiusura della posizione solo per magia.

Sì, si può naturalmente filtrare in modo diverso. Per esempio, per simbolo, ecc. Ho detto l'opzione più semplice.
 
laveosa:

buona giornata a tutti. per favore aiutatemi a capire le variabili globali. il problema è qualcosa come questo: ho una variabile bool line_1=false; cambia in vero; quando si raggiunge un prezzo e fare livelli di raggiungimento che saranno altre azioni e bool line_1 diventa di nuovo falso; ho bisogno di riavviare il sistema o i parametri non saranno raggiunti il venerdì sera, i valori di questa variabile sono persi e influenzeranno il risultato del trading, come ho capito ho bisogno di renderli variabili globali bool. non ho ancora fatto nulla al riguardo e ho bisogno del vostro consiglio se penso di fare correzioni nel codice, per favore ditemi se qualcosa deve essere fatto, grazie.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Se il codice è costruito in questo modo, allora quando si riavvia il terminale, la variabile lascerà il suo valore precedente al momento del riavvio o sarà riportata allo stato dichiarato all'inizio del programma? Grazie ancora!

Per prima cosa, leggete su GlobalVariableSet() - vi mancano i parametri e lo usate in modo scorretto.

E la sequenza delle operazioni è la seguente: quando il valore della variabile che volete salvare cambia, questo valore viene passato alla variabile globale appropriata del terminale usando questa funzione. E quando si reinizializza l'EA in init(), si passa il suo valore alla variabile tramite la funzione GlobalVariableGet().

 

Signori, per favore, datemi un suggerimento!

Sto cercando di implementare una semplice idea che è descritta nei commenti al programma.

Il programma apre ordini nel TESTER ad un prezzo che non coincide con quello specificato nel codice.

Per esempio, l'ordine si apre al prezzo di 0,86084, mentre il valore più vicino nell'array è 0,85375.

La differenza è positiva mentre il codice specifica di aprire gli ordini se la differenza è < 0,00000, cioè negativa.


Per favore avvisateci dove si trova l'errore.

Grazie.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
 
solnce600:

Signori, per favore, datemi un suggerimento!

Sto cercando di implementare una semplice idea che è descritta nei commenti al programma.

Il programma apre ordini nel TESTER ad un prezzo che non coincide con quello specificato nel codice.

Per esempio, l'ordine si apre al prezzo di 0,86084 con il valore più vicino 0,85375 nell'array.

La differenza è positiva, mentre il codice specifica di aprire gli ordini se la differenza è < 0,00000, cioè negativa.

Per favore avvisateci dove si trova l'errore.

Grazie.

Il modo migliore per trovare l'errore è quello di passare attraverso ogni linea dal basso verso l'alto e vedere come corrisponde a ciò che si vuole ottenere e ciò che è scritto.

if ((NormalizeDouble (Bid-massiv[S],Digits) <=0))
//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000
Questa condizione presuppone che... - È questo che intendevi? (1 - 1000000 <= 0) - soddisfa???

Ti ho dato una soluzione e tu l'hai "passata"...

 
TarasBY:

Il modo per trovare gli errori: passare attraverso ogni riga dal basso verso l'alto e rendersi conto della corrispondenza tra ciò che si voleva e ciò che è scritto.

Questa condizione presuppone che... - È questo che intendeva? (1 - 1000000 <= 0) - soddisfa???

Ti ho dato una soluzione e tu l'hai "passata"...

Grazie mille. Ho anche copiato il tuo suggerimento per me stesso.... solo che non l'ho capito bene..... scusa la mia stupidità .... Mi scervellerò e cercherò di capirlo.

Solo non capisco perché prendi il valore variabile Bid (prezzo dell'ultimo tick) come 1. Suppongo che sia un valore a 6 cifre con un punto decimale dopo il primo... e il valore di

Per favore, ditemi cosa posso aver frainteso.

Ho studiato attentamente il vostro codice.

doppio ld_Delta = 10. * Point;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
e questo prezzo è il prezzo aperto di una nuova barra
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}// aprirel'ordine


Ma non capisco

-Perché suggerite di usare la variabile Price invece della variabile massiv[S] ? Contiene il prezzo aperto dell'ultima barra.

La mia idea è che una delle condizioni necessarie per aprire un ordine è la coincidenza del suo prezzo di apertura con uno dei valori dell'array più vicini al prezzo dell'ultimo tick.

La mia strategia in pieno è così

ORDINE APERTO se 2 condizioni sono soddisfatte allo stesso tempo

-Il prezzo aperto dell'ultima candela

al prezzo più vicino a uno dei valori dell'array (valori dell'array - circa 2000 valori di prezzo Bid non ripetitivi in ordine casuale)

Vi sarò molto grato per l'aiuto e i suggerimenti - sono stato perplesso per il secondo giorno ..... e tutto senza risultato.


	          
 
solnce600:

Grazie mille. Ho anche copiato quel tuo consiglio.... solo che non l'ho capito bene..... scusa per la stupidità .... Mi scervellerò e cercherò di capirlo.

Solo non capisco perché prendi il valore variabile Bid (prezzo dell'ultimo tick) come 1. Suppongo che sia un valore a 6 cifre con un punto decimale dopo il primo... e il valore di

Per favore, ditemi cosa posso aver frainteso.

Ho studiato attentamente il vostro codice.

doppio ld_Delta = 10. * Point;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
e questo prezzo è il prezzo aperto di una nuova barra
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}// aprirel'ordine

Ma non capisco

-Perché suggerite di usare la variabile Price invece della variabile massiv[S] ? Contiene il prezzo aperto dell'ultima barra.

La mia idea principale è che una delle condizioni necessarie per aprire un ordine è la coincidenza del suo prezzo di apertura con uno dei valori dell'array più vicini al prezzo dell'ultimo tick.

La mia strategia in pieno è così

ORDINE APERTO se 2 condizioni sono soddisfatte allo stesso tempo

-Il prezzo aperto dell'ultima candela

al prezzo più vicino a uno dei valori dell'array (valori dell'array - circa 2000 valori di prezzo Bid non ripetitivi in ordine casuale)

Vi sarò molto grato per l'aiuto e i suggerimenti - sono stato perplesso su ..... per il secondo giorno, ma non ha alcun effetto.

Per capire cosa sta succedendo, ho bisogno di portare i calcoli alla stampante:

    //если разница между значением массива возвращенным на последнем тике 
    // и ценой последнего тика отрицательная или = 0.00000
    if ((NormalizeDouble (Bid-massiv[S], Digits) <= 0))
    {
        Print ("massiv[", S , "] = ", massiv[S], " | massiv[", S - 1, "] = ", massiv[S-1], " | massiv[", S + 1, "] = ", massiv[S+1], " | Bid = ", Bid);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыт
    }
e analizzare i risultati.
Motivazione: