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

 

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


in questa funzione si contano probabilmente tutti gli ordini.
 

Come posso determinare quanti minuti ci sono tra Time1 e Time2?

datetime Time_1     = D'2011.01.12 13:30';
datetime Time_2     = D'2011.01.05 10:30'; 

минут = Time_1- Time_2
 
sergeev:
questa è probabilmente la funzione in cui si contano tutti gli ordini. questo dovrebbe essere Buy

Questa è una funzione standard:

int CalcolaOrdiniCorrenti(simbolo stringa)
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
se(OrderType()==OP_BUY) compra++;
se(OrderType()==OP_SELL) vende++;
}
}

if(buys>0) return(buys);
else return(-sells);

}

se >0 allora è un ordine di acquisto, se <0 allora è un ordine di vendita ))))

 
Eliza:

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.

 
Scambi inversi. Cambiata la struttura dell'Expert Advisor - rimosse le funzioni. Come farlo chiudere e aprire su una candela in determinate condizioni.

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);
}
 
sergeev:

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?

extern datetime Time_1     = D'2011.01.12 13:30'; 
extern datetime Time_2     = D'2011.01.05 10:30'; 

bool   Commentari      = true;

int start()
  {

if (Commentari){
 Comment(
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/60)," минут",
      
         "\n==============================");}
   return(0);
  }
 
Eliza:

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.

 
sergeev:

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?

  • datetime è data e ora, un intero senza segno che contiene il numero di secondi trascorsi dalle ore 0 del 1° gennaio 1970.
  • extern datetime Time_1     = D'2011.01.12 13:30'; 
    extern datetime Time_2     = D'2011.01.05 10:30'; 
    
    datetime me_2     = D'1970.01.01 00:00'; 
    
    bool   Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment(
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2))," минут",
          
             "\n==============================");}
       return(0);
      }

  • se sottraggo la data 1970.01.01 02:51 butta fuori quel tempo non valido, ho solo bisogno del numero di minuti per ottenere da questo intervallo di tempo, se è per esempio 25000 minuti in questo intervallo ho bisogno di questo numero 25000 ... qualcosa del genere(
  • o non è possibile ottenere questo dalla lingua μl?
 

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