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

 
Valeriy Yastremskiy:

OrderSelect sul biglietto è stato fatto prima. L'ordine è in sospeso. Come fare in modo che l'ordine sia vendibile, oltre a controllare il tipo di ordine ad ogni tick. Nei registri, questo tempo è registrato, ma sembra che il campo per questo tempo nella struttura dell'ordine non sia previsto, o mi sbaglio? Quando cambiamo il tipo di ordine, anche OrdersTotal() e OrdersHistoryTotal non cambiano, se ho capito bene.

Il resto delle questioni mi sembra chiaro)

Hai provato con OrderOpenTime? Non ricordo nemmeno se cambia quando viene attivata una posizione.

Non so quando sia necessario controllare se l'ordine pendente è scattato ogni tick(e non prima dell'azione chiave o ogni 1...5 min), ma MT4 non ha altro modo.

In MT5 è più conveniente. In OTT si scopre la transazione, se si deve lavorare con le liste si fa l'elaborazione in OTT

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

Buon pomeriggio!

Sto lavorando a un gufo sui frattali. C'è un problema. Aiuto. L'essenza è questa:

Lo script cerca l'ultimo frattale superiore o inferiore delle ultime 100 candele con la variabile [FractalsLimit=100;] e apre la posizione BUY - se un frattale viene rotto, e viceversa per SELL.

Le ultime 100 candele dovrebbero essere usate per trovare il massimo o il minimo dei frattali e aprire una posizione. Significa che si concentra solo sui frattali massimi e minimi, non sugli ultimi.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin:

Hai provato con OrderOpenTime? Non ricordo se cambia quando viene attivato un ordine pendente.

Non so quando sia necessario controllare ogni tick(e non prima delle azioni chiave o ogni 1...5...minuti) se un ordine pendente è scattato, ma non c'è altro modo per farlo in MT4.

In MT5 è più conveniente. In OTT si impara a condurre una transazione. Se avete bisogno di lavorare con le liste, condurrete l'elaborazione in OTT.

OrderOpenTime mostra il tempo di apertura dell'ordine in sospeso. Si tratta di capire meglio il funzionamento. Quindi, il tempo viene scritto nel registro e nel diario e non viene mostrato da nessun'altra parte. Rispettivamente, se non l'abbiamo sistemato, allora possiamo visualizzarlo più tardi, secondo il fatto)))))

Se ho capito bene, sarà l'apertura della posizione / affare in MT5. Anche se non capisco la divisione in ordine/scambio/posizione come soluzione ottimale, ma ci sono più dati, ovviamente.

 
Aleksey Mavrin:

succede)) 1 si perde molto nello sfondo delle lettere inglesi l i ecc., è più conveniente chiamare allora i suffissi 001, 2... ecc.

Ho capito cosa vuoi dire) ho corretto l'errore, ora il valore della seconda maniglia è 1,0. Se metti un timeframe più grande nel primo handle che nel secondo handle, il valore del secondo handle è 0. Potete dirmi cos'altro devo sistemare per ottenere il valore della seconda maniglia in modo corretto?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime mostra il tempo di apertura dell'ordine in sospeso. Si tratta di capire meglio il funzionamento. Si scopre che il tempo è registrato nel registro e nel diario e non si riflette da nessun'altra parte. Di conseguenza, se non l'abbiamo fissato, allora possiamo guardare solo dopo, secondo il fatto)))))

È da una settimana che sollevate questo problema. Vi ho proposto di rivedere i principi di immissione degli ordini nella strategia di trading

ma se questo problema è importante per voi, non è un problema "aggiustarlo" con la discrezione di un segno di spunta.

Se vuoi provare, dovrai farlo con una certa velocità, ma se non hai un tick reale, probabilmente finirai con un sacco di errori, perché la velocità di immissione degli ordini in sospeso è molto più alta.


Quello che vorrei proporre di studiare è ilCArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint

in CArrayInt aggiungerete dei biglietti e questo tipo di dati vi permetterà di cancellare facilmente i "biglietti che sono diventati commerciabili".


come ho scritto sopra precisione - 1 tick, il codice di controllo sarà minimo

Valeriy Yastremskiy:

In MT5 sarà una posizione / apertura di trade, se ho capito bene. Anche se non capisco la divisione per ordinare / trattare / posizionare come una soluzione ottimale, ma ci sono più dati naturalmente.

Se puoi scrivere per MT5 - allora perché ne stiamo discutendo? la piattaforma è più potente, la funzionalità è superiore - confrontare MT4 e MT5 non ha senso, MT4 è più facile da inserire, ma MT5 ha più caratteristiche

 
Igor Makanu:

Stai sollevando questo problema da una settimana, ti ho suggerito di riconsiderare i principi di immissione degli ordini nella strategia di trading


Ancora non capisco. La strategia è ovviamente diversa. La domanda nasce dal fatto che un evento abbastanza importante si riflette solo nel registro. E nessuno ha risposto direttamente che non c'è da nessuna parte se non il registro del tempo in cui un ordine è diventato commerciabile))))

E la logica della strategia non dipende dal terminale. Se la logica è zoppa, allora si può certamente inventare, ma la zoppia non andrà via))))

 
Valeriy Yastremskiy:

Non è ancora chiaro. La strategia è ovviamente diversa. La domanda nasce dal fatto che un evento piuttosto importante si riflette solo nel registro. E nessuno ha risposto direttamente che non c'è da nessuna parte se non il registro del tempo in cui l'ordine è diventato mercato))))

no queste informazioni - nooooo!!!

importanza... beh ti importa, prima, quanti anni di strategie di scrittura e come ha funzionato, anche in profitto ;)

come regola, non mettere molti ordini pendenti, seguire gli ordini di mercato, se necessario, aggiungere un ordine pendente - gli ordini pendenti diventano ordini di mercato

usiamo tutto - media, piramide, griglia degli ordini e ... e molti... Non ricordo queste buffonate sui forum dei commercianti, non li leggo da più di un anno - ho più pensieri miei che di altri )))

 
Igor Makanu:

non ci sono queste informazioni - nooooo!!!

importanza... bene è importante per voi, prima di questo, quanti anni di scrittura di una strategia e avrebbe funzionato, anche in profitto ;)

come regola, non si dovrebbero piazzare molti ordini pendenti, seguire gli ordini di mercato, se necessario, aggiungere un ordine pendente - gli ordini pendenti diventano ordini di mercato

usiamo tutto - media, piramide, griglia degli ordini e ... e molti... Se non lo sai, dovresti leggere questi trucchi sui forum dei commercianti, io non lo faccio da più di un anno - ho più pensieri miei che di altri )))

Grazie))))

Martin e la media è auto-inganno e proibitivo (perché non si può né calcolare né prevedere il rischio per la definizione di BP proprietà))))) rischio, che a volte, ma solo a volte, è giustificato))))

Se la strategia è corretta, un ordine è sufficiente))))

 
Valeriy Yastremskiy:

Se la strategia è corretta, un ordine è sufficiente))))

Se nel vostro TS il numero di ordini è rigorosamente impostato, allora non dovreste avere problemi nel determinare cosa è successo agli ordini pendenti nel tick corrente

Conoscere l'ora esatta non vi darà nulla - tutte le informazioni sono ricevute all'arrivo della spunta - nessuna spunta, nessuna informazione

 

Ciao, sto affrontando un problema, come cambiare i parametri di un indicatore personalizzato da un EA. Il problema è che quando cambio qualsiasi parametro nella lista degli indicatori, viene creata una nuova copia. Quando vado nelle proprietà di queste copie, ogni copia ha il suo parametro. Più cambio il parametro, più copie vengono create. Lo uso tramite iCustom.

Per esempio:

#resource "\Indicators\\\inicator.ex4"

extern Var1=1;

//------------------------------------------

void OnTick()

{

int A;

Var1++;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\indicator",Var1,0,0);

Come risultato, vediamo nella lista degli indicatori:

Indicatore (con parametro Var1=2)

Indicatore (con parametro Var1=3)

Indicatore (con parametro Var1=4)

.... ecc.