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

 
Roger:
Durante questo minuto, l'Expert Advisor aprirà fino a quaranta ordini.

E se il primo non si apre? Aspettare il prossimo segnale per un'ora? Va bene:

C'è un segnale --> Controlla se c'è un ordine/posizione impostato/aperto su questa candela, non c'è --> impostato/aperto, c'è --> allora non c'è bisogno di altro.

 
Sepulca:

Questo è il modo per controllare... il numero di ordini o solo la prima chiamata alla funzione...


Quindi c'è più di una linea come la tua.
 
Grazie a tutti per il vostro aiuto. La funzione funziona. Il risultato viene ricevuto.
 
extern int SecondsAfterTheBar = 0; 

int start(){
...
if(NewBar() == TRUE){
...
}
return(0);
}

bool NewBar(){
   RefreshRates();
   static bool initial = FALSE;
   static datetime stat_dtime = 0;
   if ((TimeCurrent() - stat_dtime >= Time[0] - Time[1] + SecondsAfterTheBar) == TRUE){
      stat_dtime = Time[0];
    if (initial == TRUE){
      return(TRUE);
    }else{
      initial = TRUE;
      }
   }
  return(FALSE);
}

Probabilmente sono arrivato troppo tardi, ma chiunque può comunque usare la mia soluzione:

 
digits:

Ovviamente sono arrivato troppo tardi, ma la mia soluzione potrebbe comunque essere utile a qualcuno:


Grazie. Più universalmente se

bool NewBar( datetime SecondsAfterTheBar = 0 )

Poi potete specificare il ritardo in secondi quando lo chiamate.

 


Ciao amici. Potete per favore dirmi come ottenere il valore del colore dell 'indicatore dalla candela precedente e scriverlo in una variabile, per esempio se è rosso allora doppio col =1, se è giallo allora 2, se è verde allora 3. Ho provato diverse varianti, ma non ha funzionato. Capisco che il valore del colore dipende dalla disponibilità di unità nel buffer, ma per qualche motivo non riesco a ottenere esattamente l'ultimo valore fisso, cioè la candela attiva, cambia costantemente colore con l'apparizione di una nuova candela precedente chiude l'ultimo colore agente. Come faccio a saperlo?)

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1

#property  indicator_buffers 3
#property  indicator_color1  DarkGreen
#property  indicator_color2  Crimson
#property  indicator_color3  Yellow
//---- indicator parameters      
extern int RSI=8;
extern int valeur1=55;
extern int valeur2=45;

//---- indicator buffers
double   ExtBuffer1[];
double   ExtBuffer2[];
double   ExtBuffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle (0,DRAW_HISTOGRAM, EMPTY,4,DarkGreen);
   SetIndexBuffer(0,ExtBuffer1);
   SetIndexStyle (1,DRAW_HISTOGRAM, EMPTY,4,Crimson);
   SetIndexBuffer(1,ExtBuffer2);
   SetIndexStyle (2,DRAW_HISTOGRAM, EMPTY,4,Yellow);
   SetIndexBuffer(2,ExtBuffer3);
//---- names
   IndicatorShortName("RSI above/under 45/55");
   SetIndexLabel(0,"RSI"+RSI +" is above 55");
   SetIndexLabel(1,"RSI"+RSI +" is under 45");
   SetIndexLabel(2,"RSI is in the mid zone ");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1st buffer
   for(int i=0; i<limit; i++)
       if (iRSI(NULL,0,RSI,PRICE_CLOSE,i)<=valeur2) 
        {
        ExtBuffer2[i]=1;
        }
       else
       if (iRSI(NULL,0,RSI,PRICE_CLOSE,i)>=valeur1)
        {
        ExtBuffer1[i]=1;
        }
       else 
        ExtBuffer3[i]=1;
   
   return(0);
  }

questo colore:

Indicatore

Grazie per la risposta.

 
Kero:


Ciao amici. Potete dirmi per favore come ottenere il valore del colore dell'indicatore dalla candela precedente e scriverlo in una variabile, per esempio se è rosso allora doppio col =1, se è giallo allora 2, se è verde allora 3. Ho provato diverse varianti, ma non ha funzionato. Capisco che il valore del colore dipende dalla disponibilità di unità nel buffer, ma per qualche motivo non riesco a ottenere esattamente l'ultimo valore fisso, cioè la candela attiva, cambia costantemente colore con l'apparizione di una nuova candela precedente chiude l'ultimo colore agente. Come faccio a saperlo?)

int col;
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1st buffer
   for(int i=0; i<limit; i++)
       if (iRSI(NULL,0,RSI,PRICE_CLOSE,i)<=valeur2) 
        {
        ExtBuffer2[i]=1;if(i=1)col =1;return;
        }
       else
       if (iRSI(NULL,0,RSI,PRICE_CLOSE,i)>=valeur1)
        {
        ExtBuffer1[i]=1;if(i=1)col =3;return;
        }
       else 
       {
        ExtBuffer3[i]=1;
        if(i=1)col =2;
       }
   return(0);
  }
così - se i colori con i numeri non sono mescolati
 

È una condizione per aprire gli ordini? Ho capito bene?

 
KeinRich:

È una condizione per aprire gli ordini? Ho capito bene?


Questa condizione è per tutto ciò di cui avete bisogno, perché possiamo solo indovinare cosa fanno queste funzioni definite dall'utente dai loro nomi
order_total(0)
open(0,Lot,0,TP);
last_trade(1);
modify_orders(1);

 
KeinRich:

Ciao a tutti... Potete dirmi cosa dice questo?

int start()
...

ritorno(0);

Tutto è puramente sulla mia ipotesi e solo presumibilmente:

int start() {
   Comment(Info());                 // Вывод какой-то информации на экран
   int KOL_BUY  = order_total(0);   // Подсчёт количества Buy-позиций
   int KOL_SELL = order_total(1);   // Подсчёт количества Sell-позиций
   double l;                              

   if (order_total()==0) {          // Если количество ордеров равно нулю
      open(0,Lot,0,TP);             // Открываем Buy лотом Lot скорее всего без стопа, но с тейком
      open(1,Lot,0,TP);             // Открываем Sell лотом Lot скорее всего без стопа, но с тейком
      }
   if (KOL_BUY==0 && KOL_SELL!=0) { // Если нет Buy и есть Sell
      open(0,Lot,0,TP);             // Открываем Buy лотом Lot скорее всего без стопа, но с тейком
      l=last_trade(1);              // Берём лот прошлой Sell
      open(1,l,0,0);                // Открываем Sell лотом прошлой Sell скорее всего без стопа и тейка
      modify_orders(1);             // Что-то модифицируем в Sell (в какой и что - не понятно)
      }
   if (KOL_BUY!=0 && KOL_SELL==0) { // Если нет Sell и есть Buy
      open(1,Lot,0,TP);             // Открываем Sell лотом Lot скорее всего без стопа, но с тейком
      l=last_trade(0);              // Берём лот прошлой Buy
      open(0,l,0,0);                // Открываем Buy лотом прошлой Buy скорее всего без стопа и тейка
      modify_orders(0);             // Что-то модифицируем в Buy (в какой и что - не понятно)
      }
   return(0);                       // Выход из start()
}
Motivazione: