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

 
artmedia70:
La dimensione dell'array è zero. Non dimenticare ArrayResize(), o semplicemente imposta la giusta dimensione per l'array
Grazie, ho fatto diversamente, ho trovatoArrayMaximum() nell'indicatore e ho passato il valore attraversoiCustom all'Expert Advisor :)
 
Ciao a tutti, ho uno script che usa chiamate da una DLL esterna, che nello specifico conta le citazioni e crea un file con le quote necessarie, c'è un modo per far eseguire lo script su una pianificazione? Ho bisogno che funzioni ogni giorno a una certa ora?
 

Salve,

L'immagine mostra:

Prima finestra Indicatore di volume, mettere Money Flow Index(10) in cima.

Ho fatto unindicatore separato, dove prendo di nuovo il volume, ricalcolo il mouwing con il volume e provo a fare come nella prima finestra - 25%, 50%, 75%.

Ho provato come l'ho fatto io, ma non è venuto bene.

Se qualcuno ha avuto problemi con questo, per favore condividete i vostri suggerimenti.

Grazie

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
Stava parlando della seconda barra meno. E il valore medio dei limiti. Vuole prendermi in giro, credo. Gli direi di andare a farsi fottere, sai cosa intendo :)
La seconda elementare, la settima elementare, che ancora non sa che non esiste un paese del genere - la Bielorussia, è venuta agli alunni della prima elementare e alla kochetsya. E in risposta a qualsiasi domanda, semplicemente li manda o li ammonisce: devono imparare. Dovresti leggere attentamente sopra la porta in quale ramo ti trovi. Sto ancora imparando l'alfabeto, quindi non eccitatevi troppo, non capirei comunque.
 

E aevillive e artmedia70 un enorme grazie. Per la vostra pazienza e il vostro tempo. Sono sicuro che non è solo la mia opinione su di te. Tutti quelli che vengono in questo thread chiedono aiuto e lo ottengono soprattutto da voi. Grazie.

 

Ciao, cari professionisti, è passato molto tempo da quando vi ho contattato

Il punto è che c'è un Expert Advisor con 2 muwks che si incrociano e nessuno si è preoccupato di aprire un ordine

vuoto Commercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

se(MO(OP_BUY,GetLot(),GetComment())==-1) ritorno;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

else

e così via...

cioè se c'è un attraversamento della distanza, aprire un ordine

Ho bisogno di un codice per trovare il tempo dell'ultimo passaggio ...

poi dal momento attuale al tempo nella storia, cerca un ordine entro un certo periodo... e apre un ordine se non ne ha trovato uno

Ho esplorato il codice degli indicatori traccianti per questo scopo, tutto sembra essere chiaro lì

ma non so come cronometrare la prima barra dopo l'incrocio delle curve in modo che sia la più a destra

Sento che un operatore forte è necessario, ma non posso formularlo

 
evillive:

Questo non è il modo di farlo. Chiamate iCustom per tutti e 3 i buffer, scrivete ogni valore nella propria variabile e poi fate quello che volete con questi valori.

Per le strisce di Bollinger, per la seconda barra, secondo l'esempio nella guida, non è necessario deselezionarle:

Grazie.

Ma a causa del mio analfabetismo devo sempre cercare nel mio manuale e ho scovato quanto segue: un indicatore personalizzato è un programma scritto secondo l'algoritmo dell'autore. E il tutorial dice che iCustomrestituisce il valore dell'indicatore personalizzato specificato.

Ma non uso nessun indicatore personalizzato (cioè, come ho capito, sviluppato da me).

Ho bisogno di recuperare i valori degli indicatori standard, se posso chiamarli così: media mobile, bande di Bollinger e oscillatore stocastico con i parametri che ho specificato. Naturalmente, lo faccio "ad istinto" - la prima cosa che ho trovato sarà applicata. Ma anche la variante da te suggerita non mi sembra adatta.

Non c'è una soluzione senza usare tutti quei buffer, array e loop? Sono come un masso nel mare - ci affondo subito.

 
sannin:

Ciao, cari professionisti, è passato molto tempo da quando vi ho contattato

Il punto è che c'è un Expert Advisor con 2 muwks che si incrociano e nessuno si è preoccupato di aprire un ordine

vuoto Commercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

se(MO(OP_BUY,GetLot(),GetComment())==-1) ritorno;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

else

e così via...

cioè, se c'è un attraversamento della distanza, aprire un ordine

Ho bisogno di un codice per trovare il tempo dell'ultimo passaggio ...

poi dal momento attuale al tempo nella storia, cerca un ordine entro un certo periodo... e apre un ordine se non ne ha trovato uno

Ho esplorato il codice degli indicatori traccianti per questo scopo, tutto sembra essere chiaro lì

ma non so come cronometrare la prima barra dopo l'incrocio delle curve in modo che sia la più a destra

Sento che un operatore forte è necessario, ma non posso formularlo

Questo Expert Advisor non funziona per intersezione. Il criterio è il seguente: se il МА veloce è superiore a quello lento di X pip e non c'è una posizione aperta, aprirla a mercato.

Per trovare l'incrocio, si dovrebbero sempre prendere due valori - la MA veloce/lenta prima dell'incrocio e la MA veloce/lenta dopo l'incrocio per scoprire quando si scambiano di posto, per così dire. In altre parole

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - МА veloce ha attraversato quello lento dal basso verso l'alto tra la 1° e la 2° battuta.

In un ciclo infinito, guarda dalla barra zero al rilevamento dell'incrocio, sarà X+1 barra, e hai bisogno del tempo della barra X, cioè la barra più recente dopo l'incrocio.

 
rapid_minus:

Grazie.

Ma, a causa del mio analfabetismo, devo sempre scavare nel libro di testo e questo è quello che ho scoperto: un indicatore personalizzato è un programma..., scritto secondo l'algoritmo dell'autore. E il tutorial dice che iCustomrestituisce il valore dell'indicatore personalizzato specificato.

Ma non uso nessun indicatore personalizzato (cioè, come ho capito, sviluppato da me).

Ho bisogno di recuperare i valori degli indicatori standard, se posso chiamarli così: media mobile, bande di Bollinger e oscillatore stocastico con i parametri che ho specificato. Naturalmente, lo faccio "ad istinto" - la prima cosa che ho trovato sarà applicata. Ma anche la variante da te suggerita non mi sembra adatta.

Non c'è una soluzione senza usare tutti quei buffer, array e loop? Sono come un masso nel mare - ci affondo subito.

Giusto, quando si usano le Bande di Bollinger, non è necessario chiamare iCustom, ma iBands dovrebbe essere chiamato separatamente per ogni linea dell'indicatore. Il modo alternativo senza chiamare l'indicatore ("senza usare buffer, array, loop") è quello di implementare nell'Expert Advisor l'algoritmo di calcolo di questo indicatore e leggere il valore desiderato quando necessario (è possibile leggere solo il valore desiderato, per esempio, solo la linea di fondo). Ma completamente senza loop e array tutti uguali non funzionerà.
 
sannin:

Ciao, cari professionisti, è passato molto tempo da quando vi ho contattato

Il punto è che c'è un Expert Advisor con 2 muwks che si incrociano e nessuno si è preoccupato di aprire un ordine

vuoto Commercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

se(MO(OP_BUY,GetLot(),GetComment())==-1) ritorno;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

else

e così via...

cioè, se c'è un attraversamento della distanza, aprire un ordine

Ho bisogno di un codice per trovare il tempo dell'ultimo passaggio ...

poi dal momento attuale al tempo nella storia, cerca un ordine entro un certo periodo... e apre un ordine se non ne ha trovato uno

Ho esplorato il codice degli indicatori traccianti per questo scopo, tutto sembra essere chiaro lì

ma non so come cronometrare la prima barra dopo l'incrocio delle curve in modo che sia la più a destra

Sento che un operatore forte è necessario, ma non posso formularlo

Ecco un esempio, dove ho mostrato come misurare una barra dopo aver attraversato 2 muves.
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }
Motivazione: