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

 
AlexeyVik:

Oh, e c'è un'altra cosa che non capisco. Se N è datetime allora D' 19:00 ' è formato testo. Si possono confrontare? No. In caso di confronti di tempo scrivo

D'19:00' è una costante letterale di tipo datetime.
 

Voglio chiedervi, cari programmatori, per favore spiegatemi in russo come cercare le letture passate dell'indicatore con il codice. Per esempio stoploss quando si vende ho bisogno di mettere su 3 High ZigZag dalla barra zero, o sopra l'ottavo frattale superiore. ovunque ho letto - o non che, o scritto non così :)

 
Petiyashaket:

Voglio chiedervi, cari programmatori, per favore spiegatemi in russo come cercare le letture passate dell'indicatore con il codice. Per esempio stoploss quando si vende ho bisogno di mettere su 3 High ZigZag dalla barra zero, o sopra la parte superiore ottava frattale. ovunque ho letto - o non che, o scritto non così :)

Il ciclo dalla barra zero all'inizio del grafico, int x=0. Nel ciclo, chiama l'indicatore richiesto, per esempio, fractal. Se il valore non è vuoto, aggiungete 1 a x, quando x raggiunge il valore desiderato - memorizzate l'iterazione del ciclo e uscite dal ciclo, il valore dell'iterazione sarà teoricamente il numero della barra dove si trova il frattale desiderato. Teoricamente perché mentre il ciclo è in esecuzione un'altra barra può apparire su M1 e quindi il puntatore sarà mostrato su una barra sbagliata )))
 
evillive:
Ciclo dalla barra zero all'inizio del grafico, int x=0. Nel ciclo chiama l'indicatore richiesto, per esempio, fractal. Se il valore non è vuoto, aggiungete 1 a x, quando x raggiunge il valore richiesto - ricordate l'iterazione del ciclo e uscite dal ciclo, il valore dell'iterazione sarà teoricamente il numero della barra dove si trova il frattale richiesto. Teoricamente, perché quando il ciclo è in esecuzione, una nuova barra può apparire su M1 e quindi il puntatore sarà mostrato su una barra sbagliata)))
Il tempo deve essere risparmiato. O, meglio ancora, usare l'array dove è memorizzato il tempo di formazione degli ultimi frattali. La velocità di lavoro sarà ridotta grazie all'eliminazione dei loop inutili
 
Petiyashaket:

Per favore, spiegatemi in russo come cercare le letture passate dell'indicatore nel codice? Per esempio stoploss sulla vendita ho bisogno di mettere su 3 High ZigZag dalla barra zero, o il top ottavo frattale, ovunque ho letto - o non qualcosa, o scritto non così :)

"Lingua russa" e "linguaggio di programmazione" (volete una spiegazione in codice) non sono la stessa cosa.

Algoritmicamente:

1) Definire quale valore restituisce lo ZigZag di interesse, se non ha un "punto frattale" - può essere EMPTY_VALUE o 0,0.

2) Usando iCustom() nel ciclo, ottenere il valore dell'indicatore buffer corrispondente sulla barra controllata nel ciclo, controllarlo per la differenza dal "valore vuoto" e mantenere un contatore di queste differenze. Quando il contatore è uguale a 3 nel vostro caso - il numero (N) della barra sarà la barra desiderata;

3) High[N]\Low[N] - sarà il livello richiesto.

Per lo ZigZag High standard stiamo cercando qualcosa come questo:

#define  ZZ_NULL  0.0

    uint li_N = 0, li_Bar = 1;
    double ld_ZZ = 0.;
//----
    while (li_Bar < Bars - 1)
    {
        ld_ZZ = iCustom (_Symbol, _Period, "ZigZag", /* внешние параметры индикатора */, 1, li_Bar);
        if (ld_ZZ != ZZ_NULL)
        {
            li_N++;
            if (li_N >= 3) break;
        }
        li_Bar++;
    }
    double ld_Price = High[li_Bar];

Ma prima di questo, dobbiamo cambiare il numero di buffer visualizzati nel codice ZigZag da 1 a 3:

#property indicator_buffers 3
 

Grazie per le risposte, le risponderò :) ora il problema è

http://clip2net.com/s/j7xvk9

Non riesco a capire perché non modifica l'ordine, ma apre solo nuovi ordini pendenti

 
Petiyashaket:

Grazie per le risposte, le risponderò :) ora il problema è

http://clip2net.com/s/j7xvk9

Non riesco a capire perché non modifica l'ordine, ma apre solo nuovi ordini pendenti

 
evillive: Grazie per aver mostrato :)
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);           //верхний фрактал
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);         //нижний фрактал
//----
  if(Up>0&&Down==0&&Volume[0]<2) //если верхний есть а нижнего нет то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если цена позволяет выставить отложенный ордер то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {
        for (int pos=0;pos<OrdersTotal();pos++) //     скопировал эту строчку хз откуда ибо не понимаю грёбаный счетчик :) тут видимо и косяк
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); // ищем текущие ордера
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)// и если все условия совпадают то:
          {
          OrderModify(OrderTicket(),Up+5*Point,Up-sl,Up+tp,0,CLR_NONE);//переносим байстоп на новый верхний фрактал
          }


 
Petiyashaket:
Grazie per aver mostrato :)
Di cosa si lamenta nel registro delle modifiche? "Stupidamente apre nuovi ordini in sospeso" perché non c'è un limite, ma c'è un OrderSend.
 
Petiyashaket:

1) Qualsiasi strategia deve essere definita dal numero di ordini aperti allo stesso tempo. Di conseguenza, prima di aprire il prossimo ordine, dovremmo controllare quanti sono già aperti.

2) Su una barra, non ci possono essere frattali SUPERIORI e INFERIORI allo stesso tempo, rispettivamente, il controllo è classificato come

    if (Up > 0 && Down == 0)

appartiene alla categoria dell'idiozia del programmatore.

3) Prima di scrivere le condizioni per restituire i valori dell'indicatore del buffer, è necessario sapere esattamente quale valore è "vuoto" per esso? Avete controllato che sia 0?

4) Il costrutto.

    if (Volume[0] > 2)

Anche se funzionerà (nella maggior parte dei casi), ma è innaturale, perché è un'idea del "libero arbitrio" dello sviluppatore, ed è disinformativa per il commerciante. Un'alternativa - il tracciamento di una nuova barra.

5) Bisogna partire dalle basi, perché questo:

    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {

Indica che non capisci affatto quello che stai scrivendo.

Il modo migliore per capire è studiare come funzionano i codici degli altri e modificarli per i propri scopi. Buona fortuna.