Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 122

 
skyjet:

Ciao, cerco errori in questa funzione.

L'idea è che gli ordini pendenti che non sono stati aperti dovrebbero essere cancellati due giorni dopo essere stati piazzati.

min=1440;

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
         {  if(TimeCurrent()-OrderOpenTime()>=min)
            {  OrderDelete(OrderTicket());
               return;
         }  }
}  }  }
 
skyjet:

Ciao, cerco errori in questa funzione.

L'idea è che gli ordini pendenti che non sono stati aperti dovrebbero essere cancellati due giorni dopo essere stati piazzati.

min=1440;


Perché vuoi tracciare e cancellare gli ordini in sospeso? Dovresti impostare il loro datetime expiration=TimeCurrent()+min*60+sec; saranno cancellati dopo min*60+sec.
 
Sepulca:

Perché è necessario monitorare e cancellare gli ordini in sospeso? Devi impostare datetime expiration=TimeCurrent()+min*60+sec; saranno cancellati da soli dopo min*60+sec.
Forse, l'ordine pendente si chiuderà secondo qualche algoritmo, quindi si chiuderà in 1 giorno se c'è un'altra condizione, per esempio, 2 giorni. 2 giorni.
 
Sepulca paladin80 Grazie! la scadenza datetime è proprio quello di cui abbiamo bisogno :)
 

paladin80:

OrderOpenTime() restituisce il tempo di apertura dell'ordine.

Per un ordine in sospeso, questa funzione restituisce zero.

 
PapaYozh:

OrderOpenTime() restituisce il tempo di apertura dell'ordine.

Per un ordine in sospeso, questa funzione restituisce zero.

Hmm, ho rapidamente modificato il codice senza controllare le funzioni stesse. Giusto, OrderOpenTime() mostra il tempo di apertura della posizione da parte del broker, ma non il tempo di accettazione dell'ordine pendente da parte del broker. Cioè, probabilmente, sarebbe meglio specificare l'ora di chiusura immediatamente nell'ordine, o registrare l'ora di invio dell'ordine nel numero magico (se non è usato comunque) e confrontare TimeCurrent() con OrderMagicNumber( ).
 

Buon pomeriggio. Aiutami a gestire l'indicatore personalizzato.

Sto risolvendo il problema di determinare la distanza dalla linea di tendenza. Ho bisogno di ottenere la distanza della linea di tendenza esattamente sul time frame in cui è tracciata (indipendentemente dal time frame aperto nel terminale). Il valore attuale della linea di tendenza può essere ottenuto utilizzando la funzione ObjectGetValueByShift. Poiché i calcoli possono essere fatti solo in base al tempo di apertura, ho scritto un piccolo indicatore. Sono stato attratto dal fatto che la funzione iCustom ha il parametro timeframe, ma mi chiedo quanto questo parametro sia considerato quando si chiama l'indicatore.

Ecco l'indicatore:


#property indicator_chart_window
#property indicator_buffers 1
//--------------------------------------------------------------------   
extern string TL_name = "TL_1";
//--------------------------------------------------------------------   
double valueBuf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
   //---- indicators
   SetIndexBuffer(0,valueBuf);
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1, White);
   //----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   //----
   //----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int i;
   int    counted_bars = IndicatorCounted();
   //----
   i = Bars - counted_bars - 1;           // Индекс первого непосчитанного
   
   // Цикл по непосчитанным барам
   while(i>=0) {
      valueBuf[i] = NormalizeDouble(ObjectGetValueByShift(TL_name,i), Digits);
      i--;
   }     
   //----
   return(0);
}

L'indicatore considera il valore attuale della tendenza.
Chiamo l'indicatore stesso:

TL_price_now = iCustom(NULL,PERIOD_D1,"TL_value",TL_name,0,0);

Qui, per esempio, il tempo PERIOD_D1 viene passato all'indicatore come parametro, sul quale viene tracciata la tendenza e per il quale deve essere calcolata la distanza.

Calcolo semplicemente la distanza dalla tendenza:

dist = NormalizeDouble(TL_price_now - Bid, Digits);
Sembra essere così, ma non è così: quando si passa ad altri tempi (diversi da D1), l'indicatore restituisce altri valori (corretti per i tempi a cui passo).
Qui abbiamo una domanda: fino a che punto viene considerato un periodo quando si chiama la funzione iCustom?
O forse ho sbagliato l'indicatore?
 
pako:


t = OrdiniTotali();

perché contare???? ha contato??


Così l'ho fatto per passare il valore per riferimento. La logica è semplice!
 
artmedia70:

Nella mia versione, la funzione è più breve ... :)



Sì, a proposito, questo modo di implementazione è più intelligente. Solo all'inizio c'era più spazio occupato da funzioni aggiuntive. È andata a finire così:

void FindOrders(int& massive[])
{
   int oType;
   ArrayInitialize(massiveOfOrders, 0);
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      
      oType = OrderType();
      massiveOfOrders[oType] = massiveOfOrders[oType] + 1;
   }
}

int start()
{
   int i, oTotal = 0, oPending = 0;
   
   FindOrders(massiveOfOrders);
   
   for (i=0; i<=7; i++)
   {
       if (i > 1 && i < 6)
       {
           oPending += massiveOfOrders[i];
       }
       if (i < 6)
       {
          oTotal += massiveOfOrders[i];
       }
   }
   pr ("FindOrders(): " + "oTotal = " + oTotal);
   pr ("FindOrders(): " + "oPending = " + oPending);

Non è che ci sia qualcosa da ottimizzare, vero?

Cioè, è molto più comodo, quando non c'è niente all'inizio. E tutto è chiamato puramente da funzioni. E l'ultima volta si è scoperto che l'inizio ha un sacco di sovraccarichi di ogni tipo sulle funzioni principali e sovraccarichi di quelle aggiuntive...

 

Buona giornata!

Per favore aiutate e spiegate perché l'Expert Advisor non funziona o non fa trading?

Motivazione: