[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 302

 
OK ragazzi, grazie mille, molto utile, scusate per il "coraggio" ))
 
Parn25:

Aiutatemi, gente!!!

Sto cercando di sviluppare un Expert Advisor basato sulla strategia del canale del mattino. L'essenza è questa: alle 6:01 la coppia EURGBP determina il canale di movimento del prezzo dalle 0 alle 6 del mattino. Impostiamo due ordini pendenti e se l'ordine pendente attivato viene chiuso da uno stopper, apriamo un ordine nella direzione opposta. È la seconda parte della strategia che non funziona. Cioè, se uno stop è scattato, non possiamo aprire un ordine nella direzione opposta.

Bisogna mettere subito un freno alla fermata! Si attiverà automaticamente.

Ho trovato questo nella spazzatura, forse mi tornerà utile.

void OrderCloseAll(){
   for (int i=0;i<OrdersTotal();i++)
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderType()==OP_BUY)
       OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      else
      if(OrderType() == OP_SELL)
       OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
}

void OrderDeleteAll(int lots){
     for (int i=0;i<OrdersTotal();i++)
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderType()>1&&OrderType()<6)
         if(OrderLots()==lots){
          OrderDelete(OrderTicket());
          i=0;
         }
}
 //----------------------------------------------------
// покупка
void OpenBuyLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
    OrderSend(Symbol(), OP_BUYLIMIT, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) + Loss*Point;
   double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLLIMIT, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
 //----------------------------------------------------
// покупка
void OpenBuySTOP(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_BUYSTOP, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellSTOP(double lot, double price){
  double   SL = NormalizeDouble(price,Digits) + Loss*Point;
  double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLSTOP, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
File:
 
Parn25:

Gente, aiutatemi un po'!!!

Sto cercando di scrivere un EA usando la strategia del canale del mattino. L'essenza è questa: alle 6:01 sulla coppia EURGBP determiniamo il canale di movimento del prezzo dalle 0 alle 6 del mattino. Impostiamo due ordini pendenti e se l'ordine pendente attivato viene chiuso da uno stopper, apriamo un ordine nella direzione opposta. È la seconda parte della strategia che non funziona. Cioè, se uno stop è scattato, non possiamo aprire un ordine nella direzione opposta.
L'esempio con un ordine pendente è approssimativamente il seguente.
File:
 
costy_:
L'esempio con il pendolo è qualcosa del genere.
OK grazie, farò una prova!!!
 

Salve.

Oggi è il fine settimana, quindi ho solo il tester visivo in funzione :) Avvio nello Strategy Tester lo script per scaricare i valori dell'indicatore in un file ma scarica dalla data reale corrente (28 ottobre 23:55).

Come faccio a trasferire il valore (tempo) dell'ultima barra del tester visivo allo script?

int start =iBarShift(NULL,0,Time[2200+EndB-1]);
int end   =iBarShift(NULL,0,Time[EndB]);

Come passare e calcolare nello script EndB - valore dell'ultima barra nel tester?

P.S. Come ultima risorsa, metto tutto il codice dello script nell'Expert Advisor, ecc.

 

Buon pomeriggio!

Sto studiando il libro di testo, se posso fare una domanda sul materiale di studio. Se c'è un argomento separato per queste domande, sarei grato per un link.

Sto studiando l'indicatore ROC (il codice è nel file allegato).

Se ho capito bene, la logica dell'indicatore è la seguente:

nel grafico attuale si prende il riferimento MA, da esso si traccia la linea di variazione della velocità V,

inoltre il MA del prossimo (più grande TF) è calcolato, ma non visualizzato; la prossima linea V è calcolata da esso.

Lo stesso per il prossimo periodo.

Domanda: Non capisco il record dato

extern int Bars_V =13; // Numero di barre per il calcolo della velocità
Le spiegazioni del codice dell'indicatore dicono che la velocità è calcolata come differenza di 2 barre.

E ancora .....

Ho scaricato il codice di questo indicatore su MT4, su H4 non è sulla barra corrente ma circa 9-10 giorni fa secondo la cronologia.

Su altri timeframe è ok. Perché è così?

Grazie in anticipo per il vostro aiuto, saluti Olga

File:
my_roc.mq4  8 kb
 

Buona giornata!

Tutte le posizioni aperte devono essere chiuse dopo l'intervallo di tempo specificato, cioè la durata della posizione aperta deve corrispondere all'intervallo selezionato.

Domanda. Ci sono altre soluzioni oltre a OrderOpenTime()?

 
Zar:

Salve.

Oggi è il fine settimana, significa che funziona solo il tester visivo :) Avvio lo script nel tester per scaricare i valori dell'indicatore in un file e lo scarica dalla data reale corrente (28 ottobre 23:55).

Come faccio a trasferire il valore (tempo) dell'ultima barra del tester visivo allo script?

Come passare e calcolare nello script EndB - valore dell'ultima barra nel tester?

P.S. Come ultima risorsa, metto tutto il codice dello script nell'Expert Advisor, ecc.

Lo script non troverà il tempo del tester così facilmente (l'indicatore sì, però), puoi allegarlo all'inizio del test.EA

int start()
{
GlobalVariableSet( "Time_test", Time[0]) ;
.....................

e nello script

datetime time_start=GlobalVariableGet( "Time_test");

in modo rapido e affidabile ...

 
Operr:

Buona giornata!

Tutte le posizioni aperte devono essere chiuse dopo l'intervallo di tempo specificato, cioè la durata della posizione aperta deve corrispondere all'intervallo selezionato.

Domanda. Ci sono altre soluzioni, a parte OrderOpenTime()?

Ci sono molte opzioni, per esempio possiamo scrivere il tempo aperto nel file, ma sarebbe più facile scorrere gli ordini aperti e confrontare il tempo rimanente.

In generale, riformulare ... "Tutte le posizioni aperte devono essere chiuse dopo l'intervallo di tempo specificato" per ogni singola posizione (è così che ho capito la domanda).

 
LOA:

Buon pomeriggio!

Sto studiando il libro di testo, se posso fare una domanda sul materiale di studio. Se c'è un argomento separato per queste domande, sarei grato per un link.

Sto studiando l'indicatore ROC (il codice è nel file allegato).

Se ho capito bene, la logica dell'indicatore è la seguente:

nel grafico attuale si prende il riferimento MA, da esso si traccia la linea di variazione della velocità V,

inoltre il MA del prossimo (più grande TF) è calcolato, ma non visualizzato; la prossima linea V è calcolata da esso.

Lo stesso per il prossimo periodo.

Domanda: Non capisco questo disco

extern int Bars_V =13; // Numero di barre per il calcolo della velocità
Le spiegazioni del codice dell'indicatore affermano che la velocità è calcolata come differenza tra i valori di 2 barre.

E altro ancora.....

Ho caricato questo codice indicatore in MT4, su H4 non è sulla barra corrente ma circa 9-10 giorni fa secondo la cronologia.

Su altri timeframe tutto è ok. Perché è così?

Vi sono molto grato per il vostro aiuto in anticipo.

"più grande TF" - no, la stessa MA ma i dati sono presi con un offset Sh_1 re Sh_1=Bars_V; // Il periodo della velocità misurata (bar)

"Simile per il prossimo timeframe" - no, c'è uno switch all'inizio (per ogni timeframe i coefficienti sono diversi K2, K3)

    switch(Period())                 // Расчёт коэффициентов для..
     {                             // .. различных ТФ
      case     1: K2=5;K3=15; break;// Таймфрейм М1
      case     5: K2=3;K3= 6; break;// Таймфрейм М5
      case    15: K2=2;K3= 4; break;// Таймфрейм М15
      case    30: K2=2;K3= 8; break;// Таймфрейм М30
....
Period_MA_2 =K2*Period_MA_1;   // Расчётн.период МА для ближ. ТФ
Period_MA_3 =K3*Period_MA_1;   // Расчётн.период МА для след. ТФ

La definizione "periodo MA calcolato per il prossimo TF" non è vera, gli errori sono sempre presenti nei libri di testo (soprattutto le "storie" sono molto simili)

"Domanda: non capisco la seguente voce

extern int Bars_V =13; // Numero di barre per il calcolo della velocità" cerca ulteriormente dal codice Bars_V ...

   Sh_1=Bars_V;                   // Период измерен скорости (баров)

allora cos'è Sh_1, questo valore è un offset MA 1 linea di velocità, ecc.

// Предназначен для использования в качестве примера в учебнике MQL4.
non è un buon esempio, leggi qualcosa di più semplice dagli indicatori standard...
Motivazione: