Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 92

 
Artyom Trishkin:
Quindi controlla il numero di posizioni aperte sulla candela zero di M15. Se hai già una posizione ed è aperta su una candela M15 null, allora non aprirne altre.
Non so molto di programmazione, ma questo modulo si occupa di questo
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }
Ma il problema è che quando l'ordine viene chiuso da SL o TP, il prossimo segnale a M15 lo aprirà di nuovo.
 
customer03:
Non sono molto bravo a programmare, ma questo modulo lo fa
b=0;
       }
Ma il problema è che quando l'ordine viene chiuso da SL o TP il prossimo segnale su M15 lo aprirà di nuovo.

Prova a fare un controllo per una nuova barra su H1

b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != iTime(_Symbol,PERIOD_H1,0)) // покупка
      {
       opp = iTime(_Symbol,PERIOD_H1,0);

    RefreshRates();
    op = Ask;
 
Vitaly Muzichenko:

Prova una nuova barra di controllo su H1

b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != iTime(_Symbol,PERIOD_H1,0)) // покупка
      {
       opp = iTime(_Symbol,PERIOD_H1,0);

    RefreshRates();
    op = Ask;
Provato, ma nessun cambiamento.
 
customer03:
Non sono molto bravo a programmare, ma questo modulo lo fa
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }
Ma quando l'ordine viene chiuso da SL o TP, il prossimo segnale su M15 lo aprirà di nuovo.

No, non è assolutamente quello che fa questo pezzo di codice.

Devi controllare che la barra di apertura della posizione sul periodo M15 non sia uguale a zero - allora puoi aprire una posizione:

if(iBarShift(Symbol(),PERIOD_M15,OrderOpenTime())!=0)
  {
   // код открытия позиции
  }
 

Ciao, aiutami con le classi, cosa sto sbagliando?

classe ASD
{
privato:
// Le variabili e le funzioni disponibili solo all'interno della classe si trovano qui
int c (int m_a,int m_b)
{ int m_d = m_a+m_b;}

pubblico:
void d (int a,int b )
{
m_a=a+b;
}
// Le variabili e le funzioni disponibili al di fuori della classe si trovano qui
};
 
Vikon:

Ciao, aiutami con le classi, cosa sto sbagliando?

classe ASD
{
privato:
// Le variabili e le funzioni disponibili solo all'interno della classe si trovano qui
int c (int m_a,int m_b)
{ int m_d = m_a+m_b;}

pubblico:
void d (int a,int b )
{
m_a=a+b;
}
// Le variabili e le funzioni disponibili al di fuori della classe si trovano qui
};
Iniziate leggendo l'articolo.
 
Artyom Trishkin:
Iniziate leggendo l'articolo.

Lo leggo, ma non lo capisco bene.

Ecco cosa ottengo:

classe:

class ASD

  {

private:

   // Здесь располагаются переменные и функции, доступные только внутри класса

   int c(int m_a,int m_b)

     {
      m_a=a+b; m_b=a-b;

      int m_d=m_a+m_b;

      d=m_d;

      return(c(m_a,m_b));
     }

public:

   int               a;

   int               b;

   int               d;

  };

sceneggiatura:

#include <ASD.mqh>


ASD ar;
//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   ar.a=1;

   ar.b=3;

   Alert(ar.d);

  }
//+------------------------------------------------------------------+

L'allarme dà zero. Cosa c'è che non va?

 
Vikon:

Lo leggo, ma non lo capisco bene.

Ecco cosa ottengo:

classe:


L'allarme dà zero. Cosa c'è che non va?

È difficile inserire il codice tramite il pulsante SRC?

Ho inserito il codice corretto per voi.

 
Vikon:

Lo leggo, ma non lo capisco bene.

Ecco cosa ottengo:

classe:

class ASD

  {

private:

   // Здесь располагаются переменные и функции, доступные только внутри класса

   int c(int m_a,int m_b)

     {
      m_a=a+b; m_b=a-b;

      int m_d=m_a+m_b;

      d=m_d;

      return(c(m_a,m_b));
     }

public:

   int               a;

   int               b;

   int               d;

  };

sceneggiatura:

#include <ASD.mqh>


ASD ar;
//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   ar.a=1;

   ar.b=3;

   Alert(ar.d);

  }
//+------------------------------------------------------------------+

L'allarme dà zero. Cosa c'è che non va?

All'interno della classe, fate delle stampe ai valori. E poi guarda nel log quello che verrà stampato quando si esegue lo script ;)
 
Artyom Trishkin:
All'interno della classe, fate delle stampe ai valori. E poi guardate nel log cosa verrà stampato quando lo script viene eseguito ;)
Le stampe possono essere inserite solo all'interno di una funzione, ma come chiamare questa funzione per far funzionare la stampa o l'avviso non lo capisco. Potete aiutarmi a sistemare il mio codice con tre semplici variabili? Faccio tutto come descritto nell'articolo, ma l'editore non lo accetta o manca qualcosa, in ogni caso un muro, ecco perché chiedo aiuto. Grazie per SKC.