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

 
#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#property indicator_color1 blue
//--------------------------------------------------------------------
doppio Buffer[];
//--------------------------------------------------------------------
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY,2);
SetIndexBuffer(0,Buffer;)
ritorno(0);
}
// -------------------------------------------------------------------
int deinit()
{
ritorno(0);
}
//--------------------------------------------------------------------
int start()
{
int StartBar = Bars - IndicatorCounted() - 1;
for(int i = StartBar; i >= 0; i--)
Buffer[i] =(iClose("EURGBP",0,i)-iOpen("EURGBP",0,i))/MarketInfo("EURGBP",MODE_POINT)+
(iClose("EURAUD",0,i)-iOpen("EURAUD",0,i))/MarketInfo("EURAUD",MODE_POINT);
ritorno(0);
}

//---------------------------------------------------------------------

Mi dispiace non so come formattare il testo con il codice.

Questo è un semplice indicatore contatore (somma dei corpi dello strumento in pip sul timeframe corrente) strumenti qualsiasi. Ogni barra dell'istogramma inizia con "O" e finisce alla chiusura del timeframe. Per esempio il timeframe corrente è H1, alle 12.00 mostra "0" e alle 13.00 mostra "+20" e il grafico a barre legge chiaramente = +20. Ma durante quest'ora le letture erano -50 e +60, ma l'indicatore non le mostra, dovremmo aggiungere un buffer per Buffer[i] basso e uno per Buffer[i] alto. Non possiamo usare High e Low perché questi valori arrivano in momenti diversi per ogni simbolo scritto nell'indicatore. Voglio che il secondo buffer fissi il valore massimo del Buffer[i] del grafico più piccolo (M5) sul grafico corrente (H1), e il terzo buffer fissi il valore minimo del Buffer[i] del grafico più piccolo (M5) sul grafico corrente (H1). Caro, chi può consigliare cosa?

 
vitek2010:

Mi dispiace, non so come codificare il testo.

Non possiamo usare High e Low perché questi valori arrivano in momenti diversi per ogni strumento specificato nell'indicatore.

E la chiusura di ogni strumento avviene nello stesso momento, durante la vita della candela? Quindi è un'opinione sbagliata, le zecche arrivano tutte in momenti diversi)))

 
trader781:
Il punto è che ci saranno SEMPRE ordini perdenti con qualche lotto che dovranno anche essere coperti dal resto degli ordini. L'innesco è il tempo di chiusura. Se ne chiudiamo anche solo uno, l'intera catena sarà persa. Pertanto, la domanda è come rintracciare il prezzo medio di tutti quelli selezionati.

Quindi dobbiamo passare attraverso tutti gli ordini "necessari" nel ciclo e calcolare questo prezzo medio. Poi, quando il prezzo corrente si discosta dal prezzo medio calcolato nella direzione richiesta, dovremmo caricare di nuovo il ciclo con la modifica di tutti gli ordini.

Se non vogliamo leggere il prezzo medio in ogni tick, possiamo leggerlo solo quando aggiungiamo un altro ordine.

 
Alexey Viktorov:

Quindi dobbiamo passare attraverso tutti gli ordini "necessari" nel ciclo e calcolare questo prezzo medio. Poi, quando il prezzo corrente si discosta dal prezzo medio calcolato nella direzione richiesta, dovremmo caricare di nuovo il ciclo con la modifica di tutti gli ordini.

Se non vogliamo leggere il prezzo medio in ogni tick, possiamo leggerlo solo quando viene aggiunto un altro ordine.

Se non ti dispiace, spiegami come dovrei calcolare il prezzo medio quando la griglia degli ordini è distribuita in modo non uniforme (dove OrderType()<2). Questo è tutto.
 
Vitalie Postolache:

E Close per ogni strumento arriva nello stesso momento, durante la vita della candela? Non sto parlando di tick, sto parlando di fissare le letture minime e massime del buffer dell'indicatore).

Non sto parlando di tick stavo dicendo che dovremmo fissare le letture minime e massime del buffer dell'indicatore calcolate su un timeframe più piccolo, nel gap di un timeframe più grande cercherò di mostrarlo sullo screenshot In questo caso il timeframe più piccolo è H1 (ma ha diversi timeframe):

[img]https://charts.mql5.com/13/642/eurgbp-w1-instaforex-group.png[/img]

Considererò la settimana 05.12 (mirino rosso) questo grafico a barre dall'indicatore mostrato sopra mostra chiaramente che il movimento totale della coppia alla fine della settimana era in discesa di 95 punti, ma non mostra quanti punti erano in discesa o in salita durante la settimana.

E qui su questo schermo potete vedere la dinamica di questo indicatore sul grafico H1 durante questa settimana:

[img]https://charts.mql5.com/13/642/eurgbp-h1-instaforex-group.png[/img]

Vedo che l'indicatore aveva un valore minimo di 400 e dopo è salito a 700 e ha chiuso su 160 (la differenza di numeri su due schermi non è importante)

ho bisogno di tutti questi valori in un indicatore in una barra dell'istogramma e il minimo, massimo e chiusura (in questo caso sul wiki). idealmente sul timeframe corrente da quello specificato nelle impostazioni del timeframe

l'ho fatto con mt4 copiando dal sito di mcl5

 
trader781:
Se non è difficile, spiegatemi solo come posso calcolare il prezzo medio quando la griglia degli ordini è distribuita in modo irregolare (dove OrderType()<2). Questo è tutto.

Spero che tu riesca a capirlo.

for(int i=0; i<OrdersTotal(); i++) {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
   if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY) {
      _BuyProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _BuyLot+=OrderLots(); //совокупный лот по всем Sell
    }
    if(OrderType()==OP_SELL) {
      _SellProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _SellLot+=OrderLots(); //совокупный лот по всем Sell
    }
}}}

double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);

if(_BuyLot  > 0) { BuyAwerage = NormalizeDouble(Bid-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits); } else { BuyAwerage=0; }// безубыток buy
if(_SellLot > 0) { SellAwerage= NormalizeDouble(Ask+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits); } else { SellAwerage=0; } // безубыток sell
if(_BuyLot-_SellLot! = 0) { AllAwerage= NormalizeDouble(((_BuyLot>_SellLot)?Bid:Ask)-((_BuyProfit+_SellProfit)/(TickValue*(_BuyLot-_SellLot))*_Point),_Digits); } else { AllAwerage=0; } // общий безубыток
 
Vitaly Muzichenko:

Spero che tu ci capisca qualcosa.



double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);


Possiamo parlare un po' di questo? Non capisco il senso di questo codice.
 
trader781:
Possiamo parlare un po' di questo?

L'importo della variazione minima del prezzo di uno strumento nella valuta del deposito

Il valore del pip è diverso per ogni strumento e non è uguale a "1" come per esempio EUR/USD.

 
Vitaly Muzichenko:

L'importo della variazione minima del prezzo di uno strumento nella valuta del deposito

Il valore del pip è diverso per ogni strumento e non è uguale a "1" come per esempio EUR/USD.

Sì, ora vedo

si scopre che si può anche impostare uno stop fluttuante per esempio (eqi=balance*1.1) o (eqi=balance*0.9)

esistono tali strumenti?

 
trader781:

Sì, l'ho capito ora.

ma si scopre che si può anche impostare l'arresto fluttuante per esempio (eqi=balance*1.1) o (eqi=balance*0.9)

esistono tali strumenti?

Avete già un prezzo specifico a partire dal quale avete solo bisogno di pescare usando l'analogo di un trawl semplice, ma un trawl semplice è basato sul prezzo di apertura della posizione = OrderOpenPrice() , mentre qui è basato sul prezzo medio calcolato e modifica tutte le posizioni di un livello