[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 1121
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
Buon giorno/notte
Sto cercando di invertire un trade usando questo metodo primitivo che non funziona (l'Expert Advisor calcola in tick):
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // determina se ci sono ordini di acquisto && se una candela ha chiuso sotto il livello inferiore
{
CheckForClose(); // chiude l'ordine
OpenSell(); // aprire un ordine di vendita
ritorno;
}
Per favore consigliatemi dove sto sbagliando? Sarei anche grato per i link che mi permetterebbero di colmare questa lacuna.
dzhini:
Sto cercando di fare reverse trade in questo modo primitivo, che non funziona (l'Expert Advisor calcola in tick):
if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // controlla se ci sono stati ordini di acquisto && se una candela ha chiuso sotto il livello inferiore
Come posso determinare quanti minuti ci sono tra Time1 e Time2?
questa è probabilmente la funzione in cui si contano tutti gli ordini. questo dovrebbe essere Buy
Questa è una funzione standard:
int CalcolaOrdiniCorrenti(simbolo stringa)}
se >0 allora è un ordine di acquisto, se <0 allora è un ordine di vendita ))))
Come posso determinare quanti minuti ci sono tra Time1 e Time2?
la differenza restituisce il numero di secondi.
dividere per 60. si ottiene il numero di minuti.
extern double TP = 70; //takeprofit
extern double SL = 0; //stoploss
extern double Lot = 0.1;
double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}
//+------------------------------------------------------------------+
//| funzione esperto |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resBuy==0 && resSell==0 && CheckBreak()==-1& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- interessato a questa parte: chiusura e apertura su una barra
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- interessato a questa parte: chiusura e apertura su una barra
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
}
//----------------------------------------------------------------- Controllare Low&High break (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1];
if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
differenza restituisce il numero di secondi.
dividere per 60. dà il numero di minuti.
Ottengo solo la data 1971.03.04 12:00, forse questo deve essere convertito?
Ricevo solo la data, forse deve essere convertita?
Prima di tutto, perché stai moltiplicando per 60?
Secondo - se volete visualizzare il numero di minuti come un tempo come 00:15,
non devi dividere o moltiplicare per 60.
Prima di tutto, perché stai moltiplicando per 60?
In secondo luogo - se volete presentare il numero di minuti sullo schermo come un tempo come 00:15,
non c'è bisogno di dividere o moltiplicare per 60.
Sì, ho corretto per la divisione, ma l'anno esce 1970.01.01 02:51
Non mi serve per lo schermo, volevo solo trovare il numero di minuti senza date, per quell'intervallo di tempo....
anche senza dividere, esce comunque la data, o devo sottrarre la data su cui si basa la funzione?
Se volete solo un numero di minuti, non avete assolutamente motivo di usare TimeToStr
Il tempo è un normale numero int.
In alternativa, usate TimeToStr solo con il flag TIME_MINUTE