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

 
klyuchnikk:

Ciao a tutti.

Ho un Expert Advisor che lavora sulla storia (per l'analisi). Ho impostato manualmente un parametro in esso - il tempo (ore, minuti) di immissione degli ordini. Eseguo l'EA nell'intervallo di date stabilito, cambio gli orari degli ordini e lo eseguo di nuovo. Lo faccio 96 volte (dopo 15 minuti) al giorno. Come posso fare in modo che lo faccia da solo?

Posso aiutarla?
 
artmedia70:
Ancora una volta chiedo: quando esattamente volete fare l'ordine? Non rispondete con il vostro codice (non voglio capirlo - abbiamo già abbastanza codici per l'analisi), ma solo a parole,

Per esempio: voglio mettere una pausa sopra/sotto la MA a quella distanza, a condizione che ... ...yada yada yada yada ...

Per la seconda volta ti chiedo di spiegare. Avremmo risolto il tuo problema molto tempo fa.


Al momento il problema è questo: fastMa ha attraversato slowMa su... ...quindi stiamo cercando dove comprare. Poi aspettiamo che il prezzo cioè Ask (dal momento che consideriamo l'acquisto) raggiunga fastMa ( beh, credo che non ci sarà un valore esatto, abbiamo bisogno di +- qualche deviazione, è rinominato i_thresholdFromMa) e non appena il prezzo raggiunge fastMa +- i_thresholdFromMa , Expert Advisor dovrebbe mettere BUYSTOP a (fastMa + buyHear * pt).

Quello che ho trovato non funziona in un terminale e non funziona sempre in un altro. C'è qualcosa che non va in generale.

L'ultima variante della funzione buyHear qui:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;
   
   if ((ND(OOP) - Ask) >= g_stopLevel)           
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}
Ecco i parametri di input:
extern double i_thresholdFromMa = 5;                           // Отступ от МА
extern double buyHear = 10,                                    // Расстояние от МА до отложки на бай

int init()
{
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
}

Gli errori possono essere visti nello screenshot (in OrderSend() il prezzo è alimentato sopra il tallone rosso, mentre l'ordine come si vede nello screenshot è sotto....):

prezzo di apertura congiunto

artmedia70:
E un'altra cosa: se avete fastMA e slowMA definiti come globali, perché li passate nelle funzioni? Tutte le funzioni possono vederli comunque, senza passare i loro parametri alla funzione chiamata.

E prima non erano globali, venivano dichiarati in funzioni specifiche, non in start. Ma dato che non erano usati in nessuna delle funzioni, ottenerli ogni volta era in qualche modo, diciamo, un segno di "cattive maniere come programmatore" e non è comodo avere linee di codice identiche in funzioni diverse.

Artyom, pensi che io abbia il polso giusto all'inizio? Voglio dire che ad ogni tick il valore sarà ricevuto. Non è troppo caro? Dato che non sono un programmatore di formazione, queste domande a volte mi vengono in mente...

 
Tincup:

La risposta non mi è del tutto chiara, quindi lasciatemi chiedere di nuovo. Ho capito bene che quando si impostano le condizioni di trading

Dovresti usare il valore MA per il corrispondente numero di barre all'indietro, ma non il valore segnato con una freccia gialla nell'immagine.

Ho disegnato la figura come ho capito la tua risposta.



In realtà la domanda è un po' fuori luogo. La questione non è lo spostamento della curva, ma il valore a quale barra l'Expert Advisor ha bisogno di ottenere dal buffer. Questo è ciò che deve essere compreso. E non c'è alcuna corrispondenza tra il bias e l'ottenimento del valore dal buffer.
 

ciao

prima domanda


A=vero

se il valore Imacd(Main Line) 15 minuti fa è inferiore a 30 minuti fa

 
Claus084:

ciao

prima domanda

A=vero

se il valore Imacd (Main Line) 15 minuti fa è inferiore a 30 minuti fa

No, meglio avanti!
 
doppio iMACD( stringa simbolo, int timeframe, int fast_ema_period, int slow_ema_period, int signal_period, int applied_price, int mode, int shift)
Calcolo dell'indicatore Moving Averages Convergence/Divergence. Nei sistemi in cui l'OMA è chiamato istogramma MACD, questo indicatore è disegnato come due linee. Nel terminale client, la convergenza/divergenza delle medie mobili è disegnata come un istogramma.
Parametri:
simbolo - Nome del simbolo, sui cui dati verrà calcolato l'indicatore. NULL significa simbolo corrente.
timeframe - Periodo. Può essere uno dei periodi del grafico. 0 significa periodo del grafico attuale.
periodo di tempo veloce - Periodo di media per il calcolo della media mobile veloce.
periodo_lento_ema - Periodo di media per il calcolo di una media mobile lenta.
segnale_periodo - Periodo di mediazione per il calcolo della linea del segnale.
prezzo applicato - Prezzo usato. Può essere una qualsiasi delle costanti di prezzo.
modo - Indice della linea dell'indicatore. Può essere uno qualsiasi dei valori dell'identificatore di linea dell'indicatore.



La domanda qui è


se ho capito bene
- Indice del valore ricevuto dal buffer dell'indicatore (spostamento relativo alla barra corrente del numero specificato di periodi indietro).


numero di quali periodi?
o come posso ottenere il valore del macd dalla barra precedente invece che da quella attuale?

int inizio ()
{
bool A=trueif
(iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_MAIN,1)<iMACD(NULL,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2)) { A==true; } return; }


 

Clicca suiperiodi del grafico e vedi quali periodi! E trova la barra precedente(shift = 1) alla barra attuale(shift = 0) nell'ultimo posto:

double MA0 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,0);//текущий бар
double MA1 = iMACD(symbol,timeframe,fast_ema_period,slow_ema_period,signal_period,applied_price,mode,1);//предыдущий бар


O meglio ancora, iniziate a studiare il libro di testo di S. Kovalev!
 
Per favore, nella modalità di test "prezzi aperti", il tester usa solo i prezzi di apertura o i prezzi di apertura, chiusura, alto e basso?
 
xant:

Salve di nuovo.

Per favore, consigliate come risolvere il seguente problema.

C'è un indicatore in forma compilata. Il codice non è disponibile. L'indicatore riflette i livelli di prezzo nella finestra del grafico principale. Voglio usare questi livelli per il mio EA ma è impossibile chiamare l'indicatore usando la funzione iCustom() - i livelli visualizzati sono oggetti grafici. È possibile leggere i dati altrimenti, per esempio attraverso i nomi degli oggetti e il tempo? I nomi di tutti i livelli sono noti (disponibili nelle impostazioni dell'indicatore), gli oggetti sono aggiornati una volta alla settimana.

Voglio dire subito che non sono molto esperto di programmazione, sarei molto grato per una risposta utile.

Questa è una buona idea. Gli oggetti grafici sono riconosciuti per nome. I livelli possono essere specificati da due tipi (di base) di oggetti grafici: OBJ_TREND (linea di tendenza) e OBJ_HLINE (linea orizzontale). Da quanto ho capito, avete bisogno di due proprietà di questi oggetti (prezzo e possibilmente tempo):

    //---- Уровень для горизонтальной линии
    double ld_Level = ObjectGet (Name, OBJPROP_PRICE1);
    //---- Уровень для трендовой линии на текущем баре
    ld_Level = ObjectGetValueByShift (Name, Bar);
    datetime ldt_Time = ObjectGet (Name, OBJPROP_TIME1);
Qualcosa del genere.
 
Sancho77:
Si prega di consigliare: nella modalità di test per "prezzi aperti", il tester usa solo i prezzi aperti, chiusi, alti e bassi?

Sì, solo i prezzi aperti, ecco perché è importante considerarlo quando si analizza l'EA. Per esempio, se la coda della candela rompe il tuo canale, allora l'EA potrebbe non notarlo, ma puoi scriverlo nella logica del programma e risolvere il problema.