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

 

Forse non ho capito la mia domanda.

Essendo sul grafico del periodo M1 voglio riempire il buffer se sul periodo M5, la linea dell'indicatore "Stocastico" è ora sopra il livello 55.

input ENUM_TIMEFRAMES   TimeFrame2  =  PERIOD_M5; //ЭТО ВО ВНЕШНИХ Н
////////////////////////////////////////////////
       for(int i=limit; i>=0; i--) {
      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
    
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
    
      if(sto2_0>55.0)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      
      if(sto2_0<44.0)
       {
      BufferDN[i]=high[i]+distance*MyPoint;
       }

      Comment(sto2_0);
       }

Nel commento il valore attuale è corretto con M5, ma sulla storia le frecce non mettono in condizione, caos.

Cosa può essere?

Nel " seminterrato" la stocastica di M5

Le frecce sono cerchiate non secondo il segnale



xaoc
 

Sto scrivendo un Expert Advisor che piazza contemporaneamente due StopOrders, uno per vendere e uno per comprare.

Come scrivo la condizione che quando uno StopOrder scatta, il secondo (opposto) viene cancellato?

Grazie.

 
RichLux:

Sto scrivendo un Expert Advisor che piazza contemporaneamente due StopOrders, uno per vendere e uno per comprare.

Come scrivo la condizione che quando uno StopOrder scatta, il secondo (opposto) viene cancellato?

Grazie.

La condizione è semplice. Quando scatta uno StopOrder, una posizione appare nel mercato, significa che dobbiamo seguire la posizione e se esiste, dobbiamo cancellare l'ordine opposto.

Questo è un pezzo di codice per pensare)

void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1, color cl=clrOliveDrab) {
  bool b, s;
  switch(op) {
    case OP_BUY : b=ExistPositions(sy, OP_BUY , mn); break;
    case OP_SELL: s=ExistPositions(sy, OP_SELL, mn); break;
  }

  if(b) {
    DeleteOrders(sy, OP_SELLLIMIT, mn, cl);
    DeleteOrders(sy, OP_SELLSTOP , mn, cl);
  }
  if(s) {
    DeleteOrders(sy, OP_BUYLIMIT, mn, cl);
    DeleteOrders(sy, OP_BUYSTOP , mn, cl);
}}
 
Vitaly Muzichenko, per quanto ho capito, ora devi aggiungere le funzioniExistPositions eDeleteOrders
 
RichLux:
Vitaly Muzichenko, per quanto ho capito, ora dobbiamo aggiungere le funzioniExistPositions eDeleteOrders
Sì, è vero.
 
RichLux:
Vitaly Muzichenko, per quanto ho capito, ora dobbiamo scrivere le funzioniExistPositions eDeleteOrders
Non c'è bisogno di scriverli, sono entrambigià pronti
 
Vitaly Muzichenko:
Non c 'è bisogno di scriverli, sono entrambigià pronti.

Beh ..., per scopi educativi è abbastanza utile ...

Per scopi pratici, è molto costoso eseguire cicli in ogni funzione.

 
Artyom Trishkin:

Beh..., per scopi di formazione è molto utile...

Per scopi pratici, è molto costoso eseguire cicli in ogni funzione.

Perciò non ho attaccato subito e ho descritto e attaccato solo la logica della "chiusura dell'opposto" )
 

Cosa fare se lo stop/stop è 200

ma

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits);

su un dollaro-yen renderà 317.000 al tasso di cambio di 117.000

il risultato atteso è 117.200

 
trader781:

Cosa fare se lo stop/stop è 200

ma

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits);

su un dollaro-yen renderà 317.000 al tasso di cambio di 117.000

il risultato atteso è 117.200

Perché così tante parentesi? È una questione di gusti, naturalmente, ma ancora troppo.

tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);

I valori sono sostituiti in modo errato se il risultato non è corretto nell'output, perché questa linea di codice calcolerà tutto correttamente, anche con parentesi extra.