[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 170

 
splxgf:
La tua versione può essere ridotta a queste due righe aggiunte alla versione dell'autore, e con alcune modifiche alle condizioni dovrebbe in linea di principio accelerare le cose abbastanza bene.
Sei sicuro?
 
MaxZ:
Sei sicuro?

Essenzialmente il tuo suggerimento è di escludere dai controlli e dai calcoli le candele che non rientrano nella gamma UPPprice/LOWprice... questo è escluso da due linee. Se non esce dal giro, significa che il prezzo è nella gamma di cui abbiamo bisogno e facciamo i controlli standard. Il vostro codice può andare più veloce solo a scapito dei risultati, perché la logica di lavoro con INS è molto contorta usare il valore di questa variabile dall'iterazione precedente non ha senso.

 
splxgf:

Essenzialmente il tuo suggerimento è di escludere dai controlli e dai calcoli le candele che non rientrano nella gamma UPPprice/LOWprice... questo è escluso da due linee. Se non esce dal giro, significa che il prezzo è nella gamma di cui abbiamo bisogno e facciamo i controlli standard. Il vostro codice può andare più veloce solo a scapito dei risultati, perché la logica di lavoro con INS è molto contorta usare il valore di questa variabile dall'iterazione precedente non ha senso.

Quindi sei sicuro! :))))


Prima ha citato il codice:

splxgf:
        if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;

Se il prezzo è sotto Low, perché dovremmo controllare se il prezzo è sopra High? Nella vostra versione questa condizione non è esclusa. Ma nel mio suggerimento:

         if (UPP)
            ... // не выполнится
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            ..

è escluso.

Non nego che il mio codice possa non essere il più ottimale.

Ma quante volte più veloce pensi che

         if (UPP)

funzionerà che.

         if (LOWprice > iHigh(NULL,60,i))

?

Infatti:

UPP = LOWprice > iHigh(NULL, 60, i);

Solo io lo so per certo (tranne quando l'offerta è all'interno della barra storica corrente) e tu lo calcoli...

 
abolk:


Sì...

Devi diventare così contorto da trasformare tre chiare linee di codice in un codice difficile da capire.

Se avevi l'idea di dividere l'assegno iLow, iHigh, avresti potuto dividerlo subito:

E non fare battute

E avete mai pensato che un codice contorto e ingombrante a volte può essere più veloce di un semplice codice di tre righe? :)))
 
 INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;

Considerate questa sezione del codice

INS=True;

Il ciclo è andato

se (INS) il volo è ok

if (LOWprice...) per esempio, la condizione è vera, ma poi va male perché otteniamo INS=False e andiamo alla prossima iterazione

poi se (falso) e abbiamo finito, perché è un'altra barra, quindi che diavolo...

Per quanto riguarda il mio codice, non sto controllando il prezzo ma se la barra è entro +300/300 pip dal prezzo corrente e se lo è, dovrebbe essere considerata. Tutte le altre ottimizzazioni non sono così critiche perché i primi due controlli per esempio eliminano il 90% delle barre inutili.

 
splxgf:

poi se (falso) e siamo fregati, perché è un bar diverso, bisogna chiedere cosa...

Non navigato, ma navigato su altro { ... }.
 

e poi ha nuotato davvero...

Perché pensate che le variabili booleane accelerino se ogni condizione è seguita da un altro if (LOWprice > iHigh(NULL,60,i)), cioè le stesse uova ma dal lato più una condizione e un sacco di assegnazioni...

 

Whoa!

È qui che le discussioni si scaldano.

Per ora la metto così:

 extern int Distance = 3000;
 int CountH,NewCountH,CountL,NewCountL,CountB,NewCountB;
 
 double ResistH,ResistL,ResistB;
 
//======================================================================
int start(){


   double bid = Bid;
   double UPPprice = bid+Distance*Point;
   double LOWprice = bid-Distance*Point;
      NewCountH=0;
      NewCountL=0;
      NewCountB=0;
      ResistH=0;
      ResistL=0;
      ResistB=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>LOWprice) 
          if(LOWprice>iLow(NULL,60,i)) 
          if(LOWprice> bid) CountH++; else CountL++;
       }  
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+25*Point;
    }
      CountB=0;
      for(i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>=bid) if(bid>=iLow(NULL,60,i)) CountB++;
       }
      if(CountB>NewCountB){NewCountB=CountB;ResistB=bid;}  
 
     
   
    Comment("\n", 
      "\n",     
//      "\n", "     Spread                                ", MarketInfo(Symbol(), MODE_SPREAD),  
      "\n", "     Distance                             ", Distance, 
      "\n", "     CountH                               ", NewCountH, 
      "\n", "     CountB                               ", NewCountB, 
      "\n", "     CountL                                ", NewCountL, 
      "\n", "-------------------------------------------------- ",     
      "\n");
      

    if(ObjectFind("RH") == -1) {
      ObjectCreate("RH", OBJ_HLINE, 0, 0, ResistH);
      ObjectSet("RH", OBJPROP_COLOR, Magenta);
      ObjectSet("RH", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RH", 0, iTime(NULL,0,0), ResistH);

    string text=DoubleToStr(NewCountH,0);
    ObjectDelete("RHtxt"); 
     if(ObjectFind("RHtxt") == -1) {
       ObjectCreate("RHtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RHtxt", text , 8, "Arial", Aqua);
       ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      }else ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      
    string text3=DoubleToStr(NewCountB,0);
    ObjectDelete("RBtxt"); 
     if(ObjectFind("RBtxt") == -1) {
       ObjectCreate("RBtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RBtxt", text3 , 8, "Arial", Aqua);
       ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);
      }else ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);

    if(ObjectFind("RL") == -1) {
      ObjectCreate("RL", OBJ_HLINE, 0, 0, ResistL);
      ObjectSet("RL", OBJPROP_COLOR, Magenta);
      ObjectSet("RL", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RL", 0, iTime(NULL,0,0), ResistL);
     
    string text2=DoubleToStr(NewCountL,0);
    ObjectDelete("RLtxt");
    if(ObjectFind("RLtxt") == -1) {
      ObjectCreate("RLtxt", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("RLtxt", text2 , 8, "Arial", Aqua);
      ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);
     }else ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);

 return (0);}            //====== THE END ======================

È molto interessante osservare il movimento dei prezzi. Va sempre nella direzione della minore resistenza.

Si può anche prevedere il suo movimento futuro. Osservare.

Il prezzo è come l'acqua che scorre in un ruscello.

Grazie a tutti!

 

Per favore, ditemi come trovare il numero della barra con il valore più alto dell'alto.


Search_High=MathMax( High[i],High[1])

 
001:

Puoi dirmi come trovare il numero della barra con il valore chai più alto?


Search_High=MathMax( High[i],High[1])

Puoi andare su https://docs.mql4.com/ru/array/ArrayMaximum

attraverso l'array High.