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

 

Hmm... Non avevo pensato di cambiare le coordinate. Grazie per il suggerimento.

Allora ecco una domanda. C'è una condizione di punto di ingresso. L'ho implementato attraverso variabili statiche, in modo che non si azzeri ad ogni tick. Bene, in alcuni punti del grafico il robot disegna un punto di entrata dove non ci sono livelli orizzontali e, quindi, la loro intersezione con la MA. Eseguite il codice nel vostro tester e vedrete il problema. Su EURUSD. Forse questo problema deve essere implementato in un modo diverso? Non sono un professionista della programmazione.

Cioè, il modello è apparso, i livelli sono stati disegnati e il robot aspetta tre croci di uno dei livelli.

Cosa ne pensate?

 
voron_026:

Hmm... Non avevo pensato di cambiare le coordinate. Grazie per il suggerimento.

Allora ecco una domanda. C'è una condizione di punto di ingresso. L'ho implementato attraverso variabili statiche, in modo che non si azzeri ad ogni tick. Bene, in alcuni punti del grafico il robot disegna un punto di entrata dove non ci sono livelli orizzontali e, quindi, la loro intersezione con la MA. Eseguite il codice nel vostro tester e vedrete il problema. Su EURUSD. Forse questo problema deve essere implementato in un modo diverso? Non sono un professionista della programmazione.

Cioè, il modello è apparso, i livelli sono stati disegnati e il robot aspetta tre croci di uno dei livelli.

Cosa ne pensate?

Chi ne ha bisogno, se non le dispiace che lo dica? Guardate da dove il robot prende i valori e troverete un'altra soluzione al problema.

 

Help Two sta dando degli errori! Ho evidenziato gli errori in rosso, aiuto PLZ!



//+------------------------------------------------------------------+

//| Trailing Stop di Asyll.mq4 |

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#proprietà copyright "Alibek Asyll"

#proprietà link "https://www.mql4you.com"


extern int TralType = 0; // 0-Sar, 1-ATR, 2-HMA.

extern double SAR_Step = 0.02;

extern double SAR_Max = 0,2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern MMA_Period = 16;

extern int int MMA_Method = 3;

extern inttern MMA_Shift = 0;

datetime LBT;

//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int init()

{

//---

//---

ritorno(0);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

int deinit()

{

//---

ritorno(0);

}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

int start()


{

bool error = false;

se (LBT!=Time[0] {

se (OrdiniTotali()>0) {

per (int i=o; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

doppio SL = OrderStopLoss();

se (OrderType()==0) {

interruttore (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0);

pausa;

caso 1: SL = High[1] - iATR(NULL,0,ATR_Period,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 3, HMA_Shift,false,false,",1,0,0);

pausa;

}

se (SL<OrderStopLoss())

SL = OrderStopLoss();

}

se (OrderType()==1){

interruttore (TralType){

caso 0: SL = iSAR(NUll,0,SAR_Step, SAR_Max,0);

pausa;

caso 1: SL = Low[1] + iATR(NULL,0,ATR_Period,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 2, HMA_Shift,false,false,",1,0,0);

pausa;

}

se (SL>OrderStopLoss())

SL = OrderStopLoss();

}

se (SL!=OrderStopLoss()) {

if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderTakeProfit(),0))

errore = vero;

}

}

se (!errore)

LBT = Tempo[0];

}


ritorno();

}

//+-------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll: Aiuto due dà errori! Errori evidenziati in rosso, aiuto PLZ!

Ha senso usare il pulsante SRC per inserire il codice. Riportare il testo degli errori. Rimuovere il testo per accelerare l'esperto:

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//---

   

//---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//---

   return(0);

  }

Ci vuole tempo per chiamare queste funzioni - e sono vuote. E sarebbe più facile lavorare con il testo del programma senza di loro. Conta le parentesi graffe. Per rendere questo più facile, provate lo Styler nel menu Strumenti. Scartare le linee vuote.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

Buona giornata a tutti.

Ho un'idea semplice che sto cercando di codificare e testare su un tester MT-4

Aprire gli ordini quando le seguenti condizioni sono presenti allo stesso tempo

1. All'apertura di una candela di un minuto

2 Al prezzo che voglio

3. Alla data desiderata

4. Il valore del prezzo deve coincidere strettamente con il valore del giorno.

Per esempio, il giorno 27 era una candela di un minuto con il prezzo di apertura 1,2414

Ho bisogno di aprire un ordine 1) sulla candela aperta 2) a 1,2414 3) ma il giorno successivo che segue il 27

Per esempio il 28 abbiamo avuto una candela a 1 minuto aperta a 1,2438.

Ho bisogno di aprire un ordine 1) sulla candela aperta 2) a 1,2438 3) MA IL GIORNO DOPO IL 28

Per esempio il 12 c'era una candela a 1 minuto aperta a 1,2451

Ho bisogno di aprire un ordine 1) sulla candela aperta 2) a 1,2451 3) MA IL GIORNO DOPO IL 12


Per realizzare questa idea ho iniziato a studiare un tema di array e ho creato due array unidimensionali, ma non funziona

Vi sarei molto grato se poteste correggere il mio codice per implementare l'idea di cui sopra

Sono lento a capire, quindi vi sarei molto grato se poteste scrivere il codice giusto, invece di spiegarlo a parole.

In questo modo lo capirò molto più velocemente.

Ecco il mio codice.

double mass[3]=
{
1.2414,
1.2438,
1.2451
};
int mass1[3]=
{
27,
28,
12
};
double value = NormalizeDouble( Bid,4) ;
double S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);
int value1 = Day() ;
int S1 = ArrayBsearch(mass1,  value1, WHOLE_ARRAY,  0, MODE_ASCEND);

if(Bid  == iOpen(NULL,PERIOD_M1,0))
if(Day()!= S1)
if(NormalizeDouble ( Bid,4)== S)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
 

Questo codice ha lo scopo di spostare i livelli di segnale quando il prezzo si muove oltre il livello superiore o inferiore, ma non succede. Per favore, ditemi qual è l'errore.

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if(Bid>=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if(Bid<=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 
ANDREY: Per esempio, il 27 c'era una candela di un minuto con il prezzo aperto 1,2414

Ho bisogno di aprire un ordine 1) all'apertura di una candela 2) a 1,2414 3) MA L'ULTIMO GIORNO DOPO IL 27

Ecco il mio codice.

In primo luogo, non è ragionevole normalizzare un BID già normalizzato, a meno che l'istruttore non vi dica di

In secondo luogo, cosa otteniamo? Il 27, il prezzo è apparso e voi inserite urgentemente i dati nell'array, per attivarlo il 28? E se il 28 succede qualcosa di urgente? Stai mettendo dei dati in un array che è difficile da calcolare. I vostri dati dovrebbero essere calcolabili. Suggerisco di eseguire il debugging del tuo EA per gradi. 1) Determinare il prezzo richiesto e visualizzarlo utilizzando la funzione Alert(). Se sei sicuro che sia corretto, calcola e visualizza il prossimo... e così via fino alla fine. È troppo presto per scrivere tutto il codice in anticipo, perché dovrà essere modificato man mano che il debugging procede. Cosa ne pensate di questa tecnologia da semplice a complessa?

 
vikzip: Il codice è stato scritto per spostare i livelli di segnale quando il prezzo si muove oltre il livello superiore o inferiore, ma questo non accade

Diamo un'occhiata a ciò che è scritto qui. In primo luogo, le linee dovrebbero essere più corte. Si adatteranno meglio allo schermo e il compilatore lavorerà più velocemente.

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if(Bid>=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if(Bid<=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
Se il BID è più grande, bisogna fare qualcosa. Poi, se il BID è inferiore, bisogna fare la stessa cosa. Si può formulare più brevemente: se il prezzo è più o meno, allora...
Nei commenti scrivi qualcosa sullo spostamento di qualcosa, ma tutto quello che fai è cancellare tutti gli oggetti. Le tue 10 linee sono sostituite da quattro.
if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll();
   OR=0;                               // А это для чего?????????????????
} 

Ma !!! Il segno OR dovrebbe essere usato da qualche altra parte, vero? Sembra che invece di azzerare questo OR, dovremmo creare nuovi oggetti qui. O ancora più facile - invece di cancellare gli oggetti, basta spostarli in una nuova posizione - sono solo 3 righe di codice. O l'istruttore richiede di più?

if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
Da semplice a falso o viceversa?
 
STARIJ:

In primo luogo, normalizzare un BID già normalizzato non è consigliabile, a meno che l'insegnante non vi dica di

In secondo luogo, cosa abbiamo qui? Il 27 si verifica un prezzo e tu inserisci urgentemente i dati nell'array, in modo che funzioni il 28? E se ci fosse una situazione urgente il 28? Stai mettendo dei dati in un array che è difficile da calcolare. I vostri dati dovrebbero essere calcolabili. Suggerisco di eseguire il debugging del tuo EA per gradi. 1) Determinare il prezzo richiesto e visualizzarlo utilizzando la funzione Alert(). Se sei sicuro che sia corretto, calcola e visualizza il prossimo... e così via fino alla fine. È troppo presto per scrivere tutto il codice in anticipo, perché dovrà essere modificato man mano che il debugging procede. Cosa ne pensate di questa tecnologia da semplice a complessa?

Grazie mille per il suggerimento.

Ma mi sembra che nel tuo ragionamento tu stia dando per scontato che io stia cercando di scrivere un VERO EA.

Mi dispiace non averti detto che non è così.

Cerco di testare la presenza di qualche regolarità, correlazione tra i parametri di cui sopra, cioè, per confermare o rifiutare l'idea, che può essere la base per un TORKING Expert Advisor.

Perciò vi sarò grato se correggerete il mio codice, in modo che tutto sia conforme alla mia idea di cui sopra.

E i vostri commenti mi saranno ovviamente utili quando scriverò un Expert Advisor per il trading.

Grazie

 
ANDREY:

Grazie mille per il suggerimento.

Ma per come la vedo io, il tuo ragionamento presuppone che io stia cercando di scrivere un VERO EA.

Mi dispiace non averti detto che non è così.

Cerco di testare la presenza di qualche regolarità, correlazione tra i parametri di cui sopra, cioè, per confermare o rifiutare l'idea, che può essere la base per un TORKING Expert Advisor.

Perciò vi sarò grato se correggerete il mio codice, in modo che tutto sia conforme alla mia idea di cui sopra.

I vostri commenti mi saranno ovviamente utili quando scriverò un Expert Advisor per il trading.

Grazie

Scusate l'intrusione. Ma... In che modo la logica del disegno delle linee dovrebbe essere diversa per un EA di trading e non?

Quando sei al lavoro, guardi l'orologio sulla tua mano in modo diverso da come lo guardi a casa?