[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 741

 

Ce l'ho nell'ufficio dell'esperto.

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);

if(tic1<0) Print(GetLastError());

return(0);}





 
artmedia70:
Le variabili booleane non sono inizialmente inizializzate a false, in generale, prima di entrare nel ciclo, impostatele a zero (false) - quando uscite dal ciclo, avranno i valori loro assegnati nel ciclo (meglio true che 1) e continueranno ad avere questi valori fino al prossimo ingresso nel ciclo. Se l'apertura di un ordine dipende strettamente dai valori di queste variabili, allora, dopo l'ordine di aprire un ordine, controlla la presenza di questa posizione nel mercato, e se è presente, imposta le variabili a zero (falso)

e nel codice si può delineare

 
artmedia70:
Confronta il valore ADX sulla barra corrente (o preferibilmente la prima barra) con il valore ADX sulla barra precedente (preferibilmente la seconda barra).

Se è semplice, è qualcosa del genere:

Ma non è molto bello. È meglio assegnare i valori ADX a variabili doppie e lavorare con le variabili...






Grazie mille per il vostro aiuto:)
 

Amici miei, non riesco a capire come sbarazzarmi dei segnali inutili che appaiono quando la linea di tendenza è invertita. La linea di tendenza (discendente nell'esempio) è tracciata dall'estremo più grande all'estremo più piccolo, trovato in un intervallo specificato di barre. Il problema è che non appena appare un nuovo estremo inferiore, la linea di tendenza salta a quell'estremo (è progettata così).

Ma, anche sulla prima barra la linea di tendenza costruisce livelli con il valore della linea di tendenza, il cui attraversamento da parte della linea dell'indicatore dà un segnale. Se la linea dell'indicatore sulla prima barra è sotto questo livello e sulla seconda barra è sopra questo livello, allora abbiamo un crossover top-down.

Quindi... Quando la linea di tendenza salta ad un nuovo estremo inferiore, si crea una situazione in cui la linea dell'indicatore sulla seconda barra è sopra la linea di tendenza e sotto il livello tracciato, mentre sulla prima barra è sotto, cioè un inutile segnale di vendita (in questo caso):


Nell'immagine puoi vedere come la linea di tendenza è saltata ad un nuovo estremo (la posizione è segnata con una freccia verso il basso) e il livello di prezzo della nuova linea di tendenza sulla prima barra (linea rossa orizzontale)
è diventato inferiore alla linea AD sulla seconda barra e la linea AD sulla prima barra è inferiore al livello di prezzo...
Di conseguenza, spostando la linea di tendenza ad un estremo inferiore è stato simulato un segnale indesiderato... Lo stesso segnale inutile si è verificato prima -
L'ho segnato con una linea azzurra verticale...

Da qui la domanda: come evitare questa situazione? Sono esausto nel cercare di pensare a qualcosa...
Qualche pensiero? Grazie... :)

 
profitinvesting:
Grazie mille per il vostro aiuto:)
Sei il benvenuto :)
 
ToLik_SRGV:

All'inizio della funzione di avvio, aggiungete una linea di chiamata a questa funzione:

Il consigliere sarà attivato 1 volta, solo su una nuova barra.

Caro Anatoly. Grazie mille per questo codice. Un'altra domanda, come farlo funzionare sempre, ma può fare solo 1 trade su una barra?
 
artmedia70:
dopo un ordine di apertura di un ordine controlla se la posizione è già sul mercato e se lo è, resetta le variabili (false)

Dimmi come questo può essere implementato nel mio ordine?

Quale funzione devo inserire nei miei ordini per azzerarli?

 
FoxUA:

Dimmi come questo può essere implementato nel mio ordine?

Quale funzione devo inserire nel mio ordine per azzerarlo?


Semplicemente dopo aver controllato se l'ordine è sul mercato assegna valori alle variabili. Per esempio Variabile1 = false;
Quelle variabili che avete impostato a "true" nel ciclo, che era il criterio per piazzare l'ordine, devono essere impostate di nuovo a "false" dopo che l'ordine è stato piazzato, altrimenti gli ordini continueranno ad essere piazzati in lotti. Quindi, dovreste assegnare queste variabili a "false".
 
artmedia70:
Dopo aver controllato se c'è un ordine nel mercato, basta assegnare valori alle variabili. Per esempio Variabile1 = false;
Le variabili che avete impostato a "true" nel ciclo, che era il criterio per piazzare l'ordine, devono essere nuovamente impostate a "false" dopo che l'ordine è stato piazzato. Quindi, dovreste assegnare queste variabili a "false".

Devo dire che sono stato in piedi per due giorni cercando di capire cosa mettere da quello che hai detto, quindi non ho capito niente. Ti dispiacerebbe mettere questi valori nel codice che ho postato o semplicemente scrivere una funzione e dirmi esattamente dove metterla - questa è l'ultima parte del mio puzzle e non riesco a capire dove e come metterla.

 
FoxUA:

Devo dire che non ho dormito per due giorni e ho lottato con l'Expert Advisor perché non capisco cosa e dove mettere quello che hai detto, puoi mettere questi valori nel codice che ho postato o semplicemente scrivere la funzione e dire esattamente dove metterla è l'ultimo pezzo del mio puzzle e non posso mettere a fuoco dove e come metterlo

Non voglio incasinare il tuo codice (malvagio, ma onesto :)). Dimmi esattamente cosa vuoi ottenere come risultato e ti scriverò la funzione di cui hai bisogno. Onestamente - sarà più facile per me. Dovrei risolvere il mio codice... :)

... Oppure vai a letto, dormi, e il giorno dopo tutti i tuoi puzzle si uniranno... :) Ecco cosa faccio quando non capisco... A proposito, vado a letto - sono le cinque e mezzo del mattino...