Caratteristiche utili da KimIV - pagina 45

 

Un esempio di utilizzo della funzione GetPriceDiffInPoint().

Supponiamo di dover calcolare il valore in pip e la direzione del movimento del tasso tra la seconda e la prima barra sul grafico corrente. Supponiamo che il grafico attuale sia EURUSD H1. Chiama la funzione GetPriceDiffInPoint() con parametri predefiniti:

Message(GetPriceDiffInPoint());

Ecco il risultato:


La funzione GetPriceDiffInPoint() ha restituito -23 punti. Analizziamo come è stato ottenuto. A questo scopo tracciamo delle linee verticali attraverso le barre orarie 2, 1 e 0:


Passiamo a un time frame più piccolo, per esempio, M5 e segniamo l'intervallo delle barre 2 e 1 con un singolo rettangolo su di esso:

Ora possiamo vedere chiaramente che il primo nell'intervallo evidenziato sono stati due alti uguali di 1,4283, e solo dopo di loro, a metà della seconda ora è stato il basso di 1,4260. Quindi concludiamo che durante le ultime due ore EURUSD è diminuito e il valore di questa diminuzione è stato (1.4283 - 1.4260) / 0.0001 = 23 pips.


P.S. In allegato lo script per testare la funzione GetPriceDiffInPoint().

 

Selezione impressionante, non c'è una funzione per chiudere un ordine (acquisto o vendita) alla prima chiusura riuscita di una barra su qualsiasi TF...

 

Posso chiedere quali controlli vengono fatti prima di aprire gli ordini?

Se sono raccolti in una funzione separata, per favore datemi un link. In caso contrario, si può dare un elenco.

 
SK. писал (а) >>
Posso chiedere quali controlli vengono fatti prima di aprire gli ordini?

Sergei, non so se la tua domanda è per me o no?

 
KimIV писал (а) >>

...

Le funzioni di apertura, chiusura e modifica nella gestione degli errori utilizzano il comando Sleep. Ho fatto qualche ricerca e consiglio di sostituirlo con uno di questi. Il punto è che il valore del ritardo è una raccomandazione, e non deve essere strettamente questo valore. Molto spesso, è possibile eseguire azioni con un ordine in una sola volta (senza un ritardo). Ma se avete un requote, allora non mi piace il fatto che BC può calcolare quando e che tipo di operazione farò.

int start()
  {
//----
   Sleep_RND(20000);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
void Sleep_RND(int _Pausa)
  {
   MathSrand(TimeLocal());
   MathRand();
   Sleep(MathRound(_Pausa*MathRand()/32767+_Pausa/5));
   return;
  }
 
KimIV писал (а) >>

Sergei, non so se la tua domanda è per me o no.

Sì, Igor, è una domanda per te.

Il punto è questo. Ho guardato la funzione di apertura, non ci sono controlli. Apparentemente sono concentrati in qualche altra funzione. Se avete una tale funzione, per favore datemi il link. Se non vedete una tale funzione, potete scrivere una lista di controlli proprio qui. Potete farlo lentamente.

 

No, Sergei, non faccio più controlli. O meglio, lo faccio, ma non li metto in funzioni separate. Cioè, ho messo alcuni di loro... Cavolo, ti faccio un esempio:

extern int StopLoss=30;
extern int TakeProfit=50;

double ll=GetSizeLot();
double po, pp, sl, tp;
if (ExistPositions(NULL, OP_BUY, Magic)) {
  po=PriceOpenLastPos(NULL, OP_BUY, Magic);
  if (!ExistOrders   (NULL, OP_SELLSTOP, Magic+1)
  &&  !ExistPositions(NULL, OP_SELL    , Magic+1)) {
    pp=po-offSet*Point;
    if (StopLoss>0) sl=pp+StopLoss*Point; else sl=0;
    if (TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
    SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);
  }
}

Cosa vediamo qui?

1. Calcoliamo il lotto da scambiare.

2. Se c'è una posizione Buy con un numero magico specificato, il suo prezzo aperto è definito po.

Se non c'è un ordine SellStop e una posizione Sell con un Magik di un'unità più grande di quello specificato, impostiamo l'ordine SellStop al prezzo di punti offSet inferiore al prezzo di apertura della posizione Buy.

4. Nell'intervallo effettuiamo il calcolo dei livelli di prezzo sl e tp.

 
KimIV писал (а) >>

4. In mezzo, calcolare i livelli di prezzo sl e tp.

Questo è quello che voglio dire. Bisogna tenere conto dei vincoli esistenti, che, in generale, cambiano continuamente.

C'è qualche funzione che analizza tutti i possibili vincoli?

Lo stesso vale per la modifica.

--

(Ho 16 funzioni - 3 per ogni ordine buono (OP,SL,TP) e 2 per ogni ordine a mercato (SL,TP),

e poi altre combinazioni di permessi da analizzare).

 
SK. писал (а) >>
Esiste una funzione che analizza tutti i tipi di vincoli?
Non ancora... in qualche modo non ho dovuto farlo. Ma grazie a voi, ci ho pensato e ho sentito che avrei dovuto farlo! >> Grazie!
 

Funzione GetTypePrice()

Restituisce il nome del tipo di prezzo. La funzione accetta un solo parametro opzionale. Valori validi: PRICE_CLOSE, PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_MEDIAN, PRICE_TYPICAL, PRICE_WEIGHTED. Il valore predefinito è 0 - PRICE_CLOSE.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование типа цены.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    Applied_Price - тип цены                                                |
//+----------------------------------------------------------------------------+
string GetTypePrice(int Applied_Price=0) {
  switch (Applied_Price) {
    case PRICE_CLOSE   : return("Close");
    case PRICE_OPEN    : return("Open");
    case PRICE_HIGH    : return("High");
    case PRICE_LOW     : return("Low");
    case PRICE_MEDIAN  : return("Median");
    case PRICE_TYPICAL : return("Typical");
    case PRICE_WEIGHTED: return("Weighted");
    default            : return("Unknown Type Price");
  }
}
Questa funzione è utile per commentare o registrare il lavoro di indicatori, script e Expert Advisors, in particolare, per visualizzare le spiegazioni dei valori delle costanti di prezzo.
Motivazione: