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

 
dimon74:
Potrebbe essere utile!!! Cercate di basarvi su un prezzo: diciamo Bid. Il prezzo di apertura per OP_SELLSTOP sarà Bid , e per OP_BUYSTOP - Bid+87*Point (o quello che ti serve).
Ho capito l'idea, grazie!
 
Vinin:

Ora un mago, i parametri sono impostati su

Guarda il messaggio privato...
 

Per favore, aiutatemi. Forse qualcuno sa come implementare una funzione nel codice, che confronta il penultimo valore della storia con l'ultimo (stiamo parlando di posizioni chiuse) non importa quale valore (per esempio OrderCloseTime()), e se sono diversi (in questo caso il penultimo è inferiore all'ultimo) - fare un BLA-BLA-BLA. Se possibile perfezionate il mio codice, o scrivete il vostro se avete sbagliato direzione.

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

GRAZIE IN ANTICIPO!!!

 

Aiuto per il controllo.

Dopo che la prima unità appare nel ciclo, controllare se questa unità terrà per t+t1 tempo (controllare ogni delta secondi). Se tiene, lo compriamo, e se ad un certo punto non tiene, usciamo dal ciclo. In altre parole il segnale è valido, se è stato controllato ogni intervallo delta ed era sempre uno.

Sto pensando correttamente?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

Aiuto per il controllo.

Dopo che la prima unità appare nel ciclo, controllare se questa unità terrà per t+t1 tempo (controllare ogni delta secondi). Se tiene, allora compriamo, e se ad un certo punto non tiene, allora usciamo dal ciclo.

Sto pensando correttamente?


Il risultato è un ciclo while infinito (t è sempre <t+t1, solo se t1=0). Nel ciclo sign1 sempre =1
 
abolk:

Il risultato è un ciclo while infinito (t è sempre <t+t1, solo se t1=0). Nel ciclo sign1 sempre =1

Come risolvere l'errore?
 
gince:

Come correggere un errore?

Per correggere un errore, bisogna dettagliare l'algoritmo (non il codice, ma l'algoritmo). E poi sovrapporre il codice all'algoritmo
 
abolk:

Per correggere l'errore, l'algoritmo deve essere dettagliato

Viene ricevuto un segnale binario 0 o 1. Se viene ricevuto un 1, allora da questo momento cominciamo a controllare se terrà per 10 min (600 sec) controllando ogni 60 sec. Se tutti i 10 minuti c'era un 1, allora Compra, e se almeno una volta non c'era un 1, allora finisci di controllare e considera che non c'è nessun segnale per aprire.
 
gince:

Viene ricevuto un segnale binario 0 o 1. Se viene ricevuto un 1, allora da questo momento cominciamo a controllare se terrà per 10 minuti (600 secondi) controllando ogni 60 secondi. Se tutti i 10 minuti erano uno - Acquista, e se almeno una volta non era uno allora finisci di controllare e considera che non c'è nessun segnale di apertura.

Non è chiaro nel codice come cambia il segnale discreto sign0. Nel codice presentato il segnale non cambia. C'è un tentativo infruttuoso di lavorare con t
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
Questo è preso da Moving Average.mq4