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

 
Code:


Grazie per la risposta e risponderò alle vostre domande.

Questa caratteristica è esattamente l'idea alla base dell'indicatore. E allo stesso tempo è un esercizio di MQL. Ho pensato a un compito e intuitivamente capisco che la sua implementazione in un linguaggio non è molto difficile. Mi siedo e lo provo.

Quindi, l'essenza della caratteristica è che confronto un certo livello teorico fisso di due volumi unidirezionali con il livello reale. Cioè, se il rapporto effettivo tra la somma dei due volumi e l'intervallo effettivo di "apertura-chiusura" è superiore a quello teorico specificato, aggiungo un "bonus" al secondo volume effettivo sotto forma di differenza tra i risultati teorici e reali calcolati. Se il livello reale è inferiore a quello teorico, sottraggo la stessa differenza dal volume della seconda barra. Posso spiegarlo chiaramente?

Per sicurezza, dirò che nel rivelare questa caratteristica, hai messo le parentesi in modo errato, probabilmente in fretta.

Inoltre, mi sembra che quelle stringhe che lei considera equivalenti alle mie porteranno alla divisione per zero. Ora controllo.

È chiaro. Ma non è chiaro come 2 (la media tra i due volumi) e ciò che è calcolato nella variabile UP12 siano correlati. Dopo tutto, le dimensioni di entrambi sono diverse. I tempi e il prezzo nei denominatori. Dopo tutto, a scuola ci hanno insegnato che metri e chilogrammi non si sommano in nessun modo! :))))


È vero, è sbagliato! :)))) Una cosa è avere formule come frazioni, un'altra cosa è mettere tutto su una linea e non capire come... Questa è disattenzione, non fretta...

Ho anche ottimizzato il codice in modo errato. Anche in questo caso si è trattato di un errore matematico. Ho dimenticato di mettere le parentesi.

   double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);
 
Roman.:

Il tuo punto non è affatto quello giusto... ai criteri di trading sbagliati, la domanda riguarda lo STOHAS-TEAM... :-Р

La domanda era questa:

idee per la vita:

Se la condizione1 è soddisfatta, allora:
-controllare gli ordini di vendita aperti
-Se ci sono, chiudeteli.
-controllare la disponibilità di fondi sul conto
-Aprire l'ordine di acquisto

Lo stesso se la condizione 2 è soddisfatta, allora
-controllare se ci sono ordini BUY aperti
-se ce ne sono, chiudeteli
controlla se ci sono ordini BUY aperti - se ci sono, chiudili
-aprire un ordine SELL
+ analisi degli errori (non è la cosa principale, ma è possibile)

Cosa ha a che fare questo con HOSTAGE? :))))

Tutti i controlli necessari sono già stati fatti e si è formato o meno un segnale commerciale.

 
demlin:

Ciao a tutti!

Grazie al prezioso aiuto degli esperti di questo ramo (specialmente Roman) sono riuscito a fare un semplice Expert Advisor, che ha mostrato + sul tester. Domanda: come determinare se può essere collocato per il trading reale? Ci sono dei criteri?


Sì, quali sono i criteri, si lavora sulle cose "di base" (affilatura per il reale - il controllo di scollegare e passare a una linea supplementare non considero), in forma di gestione competente di possibili errori con l'adozione dell'esperto delle decisioni organizzative appropriate sul lavoro ulteriore, poi la demo è obbligatoria, poi il micro-reale ... Se siete soddisfatti dei risultati - "go for broke" ... :-)) Per cominciare, prendete a parte la gestione degli errori degli EAs dal tutorial, prima di piazzare gli ordini non dimenticate di fare i controlli necessari dei requisiti e dei limiti delle operazioni di trading, nella ricerca qualcosa come: gestione degli errori sito:mql4.com, preparazione degli EAs per il sito reale:mql4.com, io (parte :-R) ho un esperto che fa tali accertamenti come questo:

// После старта
if (!IsTradeAllowed() || IsTradeContextBusy() || !IsConnected()) return; // если торговля невозможна, то выходим

Controllo della selezione dell'ordine per l'utilizzo

                if (ticket>0)                                               // Если позиция открылась
                    {
                       while(OrderSelect(ticket,SELECT_BY_TICKET)==false) Sleep(1000);     // Если ордер выбран
                         double OpenPrice=OrderOpenPrice();
                         ...  
                           

All'inizio

color ColorBuy = Blue, ColorSell = Red;
bool UseSound = true;
string alert.wav;
color clr, ClrClose = Gray;
int Level_new; 
double price;
bool result, Buy_signal=false, Sell_signal=false;
int  orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                        // Номер ордера
double orderLots;                  // Lots   
double orderProfit;                // Profit
double Price;                      // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double  TP;                        // Значение TakeProfit ордера
static datetime prevtime = 0;       // по ценам открытия

int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
      
    if (!IsTesting())
       {
         if (IsExpertEnabled())  Comment("Советник запустится следующим тиком");       
           else  Comment("Отжата кнопка \"Разрешить запуск советников\"");
      
       }
    ...
   
   return (0);
}

Questo è tutto, IMHO, per cominciare; potremmo continuare...

In ogni caso, il controllo del "Manager" è necessario... :-R Per non essere straziantemente doloroso per i depositi persi...

 

MaxZ:


La domanda era questa:

Cosa c'entra questo con lo STOCHASTAGE? :))))

Tutti i controlli necessari sono stati fatti e il segnale di trading è stato formato o meno.


C'era una domanda diretta:

"Questo è tutto sulla coppia di valute corrente.
int start()
{
doppio M_0, M_1; // valore MAIN su 0 e 1 bar
S_0, S_1; // valore del segnale su 0 e 1 bar
//--------------------------------------------------------------------
// Chiama la funzione per la visualizzazione tecnica.
M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0); // 0 bar
M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1); // 1 barra
S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); // 0 bar
S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); // 1 barra
//--------------------------------------------------------------------

if( M_1 < S_1 && M_0 >= S_0 ) // CONDIZIONE 1: il verde incrocia il rosso dal basso

if( M_1 > S_1 && M_0 <= S_0 ) // CONDIZIONE 2: Il verde incrocia il rosso dall'alto

//--------------------------------------------------------------------
return; //Esci da start()
}"

Fondamentalmente, qualsiasi cosa, IMHO, l'autore si riferiva, lo capirà... :-Р

 

Roman.:


All'inizio.

...
int init(){
    IsExpertStopped = false;
    if (!IsTradeAllowed())
       {
         Comment("Необходимо разрешить советнику торговать");
         IsExpertStopped = true;
         return (0);
       }
...

Qual è lo scopo della variabile IsExpertStopped? E si scopre che ogni tick nel registro mostrerà il messaggio " Expert Advisor deve essere autorizzato al commercio"...

 
MaxZ:

Qual è lo scopo della variabile IsExpertStopped? E si scopre che ogni tick nel registro ci sarà un messaggio "Expert Advisor deve essere autorizzato al commercio"...

Questo è quello che faccio:


F1 premere su
IsTradeAllowed()

Lo scoprirai... :-Р

In particolare "

Se l'EA è autorizzato a commerciare e il thread è libero", allora commercia, altrimenti IsExpertStopped = EA fermato, in attesa del permesso di commerciare...

 
Roman.:

F1 premere su

scoprirlo... :-Р

Vale a dire "

se l'EA ha il permesso di commerciare e il thread per l'esecuzione del trade è libero", allora commercia, altrimenti IsExpertStopped = EA fermato, in attesa del permesso di commerciare...

Capito... Oggi sono totalmente distratto. Vedo init() e penso a start()! :)))))

 
MaxZ:

È chiaro. Ma non è chiaro come 2 (la media tra i due volumi) e ciò che è calcolato nella variabile UP12 siano correlati. Dopo tutto, le dimensioni di entrambi sono diverse. I tempi e il prezzo nei denominatori. Dopo tutto, a scuola ci hanno insegnato che metri e chilogrammi non si sommano in nessun modo! :))))


Giusto, non è giusto! :)))) Una cosa è avere formule come frazioni, un'altra cosa è mettere tutto in una riga e non capire come... Questa è disattenzione, non fretta...

Ho anche ottimizzato il codice in modo sbagliato. Anche in questo caso si tratta di un errore di matematica. Ho dimenticato di usare le parentesi.


MaxZ, sbrigati, oh sbrigati :))) con le conclusioni!

Non aggiungo chilometri e chilogrammi. Un esempio di vita reale. L'eurodollaro di oggi, 5 minuti. Ho appena dato un'occhiata al grafico dove ci sono 2 candele crescenti in fila.

vback1=703, dVolume=696. (vback1+dVolume)/2=699,5.

Sulle stesse candele (Close[i]-Open[i+1] )*1000=(1.42911-1.42549)*1000=3.62

(vback1+dVolume)/3.62=386.5

Totale: 696+699,5-386,5=1009. Che è quello che dovrebbe essere disegnato. E che cosa esattamente 1009 è mostrato dall'indicatore in questo luogo. E così via.

Un'altra cosa è che io stesso ho calcolato questo esempio qui e ho scoperto che secondo la formula del codice, quello che ho descritto nel post precedente non si verifica. In realtà si è rivelata un'ideologia diversa, una sorta di autoregolamentazione. Finché i valori meno del parametro vrealUP12 non superano la somma di dVolume+vteor12, ci sarà un'aggiunta all'ultimo volume. Oppure devono essere inseriti parametri aggiuntivi per il calcolo di ExtVolumesBuffer[i].

E nella linea

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

L'ho appena reimpostato su

double vrealUP12=(dVolume+vback1)/UP12;

in modo da non allungarsi.

 
Code:


MaxZ, sbrigati, oh sbrigati :))) con le tue conclusioni!

Non ho sommato chilometri e chilogrammi. Un esempio di vita reale. L'eurodollaro di oggi, 5 minuti. Ho appena dato un'occhiata al grafico dove ci sono 2 candele crescenti in fila.

Merda... Si sommano, e come! :))

La variabile vteor12 ha la dimensione di Volumi (cioè i nostri metri).

 vteor12=(dVolume+vback1)/2;

La variabile UP12 ha la dimensione dei pip per alcune coppie di valute.

UP12=(Close[i]-Open[i+1])*1000

La variabile vrealUP12 è dimensionata sul rapporto tra volumi e punti (cioè i nostri chilogrammi).

vrealUP12=(dVolume+vback1)/UP12;

E finisci per calcolare la tua caratteristica, che è la somma di metri e chilogrammi, che è ciò di cui si tratta! ;D

ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;


A meno che 2 non sia i 20 punti che il prezzo per due barre dovrebbe passare in teoria! :)) Ma questa è già una sciocchezza...


Codice:


E nella linea

double vrealUP12=(dVolume+vback1)/((Close[i]-Open[i+1])*1000);

L'ho cambiato di nuovo in

double vrealUP12=(dVolume+vback1)/UP12;

per non allungarlo.

L'allungamento è talvolta utile. Risparmia le risorse del computer! :))) Perché avete bisogno di questa variabile extra?

 
MaxZ:

Oh, cavolo... Tu lo sei! :))

La variabile vteor12 ha la dimensione di Volumi (cioè i nostri metri).

La variabile UP12 ha la dimensionalità di Price.

La variabile vrealUP12 è dimensionata da Volumi e Prezzo (questo è il nostro chilogrammo).

E alla fine calcoli la tua caratteristica, che è la somma di metri e chilogrammi, che è quello che conta! ;D


Ok, proviamo un altro modo di vedere la cosa.

vteor12 può essere scritto come (dVolume+vback1)/k1 (fattore 1)

vrealUP12 può essere scritto come (dVolume+vback1)/k2 (fattore 2)

Come ho cercato di descrivere l'ideologia dell'indicatore, essa consiste nel confronto di alcuni livelli teorici e reali. Per ottenere questi livelli, confronto (cioè divido) lo stesso valore (dVolume+vback1) con alcuni valori teorici (k1) e reali (k2). È chiaro che k1 sto solo inventando, per mettere le cose nei loro nomi propri. O, se volete, fare una supposizione. Ora questo deve essere paragonato a qualcosa. Niente è più oggettivo e vero del grafico stesso in questo caso. Quindi prendo le differenze di apertura e chiusura, prendendole come linea di fondo di un dato periodo di tempo. E l'unico compito qui è quello di portarlo alla stessa cifra, che è il motivo per cui viene moltiplicato per 1000.

Provate a calcolare diverse varianti di candele vicine su una calcolatrice e sarete sorpresi dalla varietà dei risultati secondo questa formula molto semplice.

E in termini di logica scolastica hai ragione. Aggiungo Volume + Volume/Prezzo, non puoi farlo a scuola. :))

Motivazione: