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

 

Cerco di calcolare gli swap, ma non funziona

Ecco il codice che produce gli swap degli ultimi 20 scambi.

for ( int j=OrdersHistoryTotal( )-1; j>=OrdersHistoryTotal( )-21; j--) {
OrderSelect(j, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPLONG)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
if(OrderType()==OP_SELL)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPSHORT)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
}

Ma lo swap stimato e lo swap reale sono diversi. Non è che il prezzo dell'offerta non sarà mai più lo stesso, non sono i dieci millesimi.

Per qualche motivo la differenza è un multiplo di 10.

Cioè, lo swap calcolato è 10 volte superiore a quello reale.

Non posso nemmeno indovinare cosa c'è di sbagliato qui.

MarketInfo(OrderSymbol(),MODE_SWAPTYPE) restituisce uno, quindi

"Metodo di calcolo degli swap 1 - nella valuta di base dello strumento;"

Prendo il valore di swap in pip, che restituisce

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Moltiplico questo valore per Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

poi a la dimensione del lotto

*OrderLots()

e moltiplicando per il valore di un punto nella valuta di deposito di un lotto

*MarketInfo(OrderSymbol(),MODE_TICKVALUE)

I valori restituiti sono:

LOTTO EURGBP = 0.46000000 SWAP REALE = -1.31000000 SWAP STIMATO -13.05244609

 

Per favore, ditemi come fare))

doppio MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

se (MA1-MA2>Point)//MA guarda in alto

se (MA1-MA2,-Point)//MA guarda in basso

 
vasya_vasya писал(а) >>

Moltiplico questo valore per Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

A cosa serve quello?

 
Roger >> :

Per favore, ditemi come fare))

doppio MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

se (MA1-MA2>Point)//MA guarda in alto

se (MA1-MA2,-Point)//MA sta guardando in basso

Grazie mille))

 
Roger писал(а) >>

A cosa serve questo?

Non sono riuscito a trovare una descrizione di ciò che restituisce

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Ho fatto una conclusione che questo è EUR dimensione del punto in EURGBP quotazione , così ho moltiplicato per BID per ottenere quanto è in GBP

Il punto è che

MarketInfo(OrderSymbol(),MODE_TICKVALUE)

Restituisce il valore del punto per lotto solo per GBP nella quotazione EURGBP, non per EUR.

 
vasya_vasya писал(а) >>

Non ho trovato da nessuna parte una descrizione di ciò che il valore restituisce

Per qualche motivo mi sembrava che tutti i calcoli fossero nella valuta del deposito.
 
Roger писал(а) >>
Per qualche motivo continuavo a pensare che tutti i calcoli fossero nella valuta del deposito.

Funzione MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Restituisce un valore intero di -2, lo stesso di tutti gli altri ordini. Quindi presumo che questo sia il valore dei punti.

Supponiamo che questo sia il valore dello swap espresso in pip della nostra valuta di deposito.

Valuta di deposito = USD

Moltiplicare

MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Per numero di lotti

*OrderLots()

Moltiplicare anche per il valore di un pip della nostra valuta di deposito per lotto

*10

Ottenere

SWAP = -9.20000000

Invece di

SWAP REALE = -1.31000000

 
vasya_vasya писал(а) >>

Funzione MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Restituisce un valore intero di -2, lo stesso di tutti gli altri ordini. Quindi, presumo che questo sia il valore dei pip.

Per EURGBP restituisce 0 (questo è Alpari) per short e -0.68 per long e questo è esattamente in dollari.

 
Profili si prega di consigliare, secondo l'aiuto di lingua mql5 non c'è funzione iHighest come calcolare il massimo alto per N periodo? ... Ho provato copyHigh e fmax, ma solo per un certo periodo e non che naturalmente, aiuto
 

Per dirla in modo crudo:

double HighestBar(int start, int end)
{
double maxBar;
for (int i= start; i< end; i++)
if( maxBar<High[ i]) maxBar=High[ i];
return( maxBar);
}
Motivazione: