[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 303
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ci sono molte opzioni, per esempio registrare i tempi aperti in un file, ma è più facile scorrere gli ordini aperti e confrontare i tempi di vita
.In generale, riformulare .
"È necessario chiudere tutte le posizioni aperte dopo un determinato intervallo di tempo
Lo script non troverà il tempo del tester così facilmente (ma l'indicatore sì), puoi attaccarlo all'inizio dell'advisor del test
in modo rapido e affidabile ...
Sto cercando di scrivere un inikator. Non capisco perché ridisegna. Inoltre, attinge solo al rendering. Per favore, aiutatemi. Sono nuovo nella programmazione.
#proprietà indicator_chart_window
#proprietà indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Red
//---- parametri di ingresso
extern int N;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- buffer
doppio RLB_Buffer[];
doppio RLB_Buffer_1[];
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong, prima;
int i, ii, bar_high, bar_low, first_t_bar, now_bar, first_t_bar_1, now_bar_1;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
stringa short_name;
//---- linea di indicazione
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexBuffer(1,RLB_Buffer_1);
ritorno(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
Comment(i," ",ii);
//----
se(Bars < 3)
ritorno(0);
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //le barre tendono verso l'alto
now_bar=iBarShift(NULL,0,TimeCurrent(),false); /ultima barra, la più a destra
i=barre contate-prima_t_bar+1;
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //trend start bar
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); /ultima barra, la più a destra
ii=barre contate-primo_t_bar_1+1;
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; //if(counted_bars), allora trend start bar
if(counted_bars == 0)
{
primo = falso;
i=primo_t_bar+1;
ii=primo_t_bar_1+1;
}
//------------ //minori barre contate
dirlong = falso;
se(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) //se la tendenza è al rialzo
{
mentre(i>=0)
{
x++; //conteggio delle barre dall'inizio del trend
Real_Line_Balanse=Close[i+5]; //conteggio della somma dei rallentamenti della tendenza
RLB=Real_Line_Balanse;
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //mostrare la linea solo se il prezzo è alto
//-------
if(RLB>Close[i]&& x>50) //se il prezzo ha attraversato RLB dall'alto in basso
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//poi determinare HIGH tra
/ultima barra e inizio della tendenza
some_time_1=Time[bar_high]; //nuovo inizio della tendenza al ribasso
x=0; //azzeramento del contatore di barre dall'inizio del trend
Real_Line_Balanse=0;
}
i--;
}//while
//-------
}//dirlong
//---------------------
//---------------------
if(dirlong == false) //se la tendenza è al ribasso
{
mentre(ii>=0)
{
x1++; //conteggio delle barre dall'inizio del trend
Real_Line_Balanse_1=Close[ii+10]; //conta la quantità di barre del trend
RLB_1=Real_Line_Balanse_1;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //se il prezzo ha attraversato la RLB dall'alto in basso
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//poi determinare il LOW tra
/ultima barra e inizio della tendenza
some_time=Time[bar_low]; //nuovo inizio della tendenza al rialzo
x1=0; //azzeramento del contatore di barre dall'inizio del trend
Real_Line_Balanse_1=0;
}
ii--;
} //while
//-------
}//dirlong
//---------------------
ritorno(0);
}
//+------------------------------------------------------------------+
Questa è una sciocchezza. Invece di
i=barre contate-prima_t_bar+1;
Ho messo un disegno che conta le barre che conta se stesso. Tutto ha cominciato a scorrere senza intoppi. IndicatorCounted(); glitch o non capisco...
come informare una variabile sullo stato di un ordine chiuso?
Questa è una sciocchezza. Invece di
i=barre contate-prima_t_bar+1;
Ho inserito un costrutto che conta le barre contate stesse. Tutto va bene. IndicatorCounted(); glitch o non capisco...
Si usa while(i>=0), quindi quando appare una nuova candela, i=1 (per assicurarsi che i dati della candela precedente siano contati una volta dai dati registrati).
Perché inserire some_time=D'1971.01.11 00:00'; usare Bars , IndicatorCounted non funziona per me (beh, l'errore è probabilmente dovuto alla first_t_bar).
Il tuo algoritmo e dovresti correggerlo.
"Sono nuovo nella programmazione."Dal 2007).
come informare una variabile sullo stato di un ordine chiuso?
:)
+ ...
Per Vitaluha:
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
Il problema è che l'EA riapre costantemente gli ordini, cioè c'è un segnale di acquisto - apre un ordine, poi lo chiude a profitto, e le condizioni sono ancora conservate lo apre di nuovo.
Ho pensato che potrebbe essere gestito con il tradizionale contatore di acquisto e vendita - se un ordine di acquisto ha aperto il contatore +1 e un nuovo acquisto non può essere aperto fino a quando il contatore è 0 e il contatore viene resettato solo quando viene chiuso.