Caratteristiche utili da KimIV - pagina 109

 
Ho modificato un po' la funzione. Ora calcola le intersezioni senza crash.
Parametri di ingresso: |
nm1 - nome della prima linea |

nm2 - nome della seconda linea

sulla produzione M - livello dei prezzi.

void Middle(string nm1,string nm2)
  {
  double x1, x2, x3, x4;
  double y1, y2, y3, y4;
  double k1, k3;
  
  if(ObjectFind(nm1)==0 && ObjectFind(nm2)==0)
    {
    y1=ObjectGet(nm1, OBJPROP_PRICE1);
    y2=ObjectGet(nm1, OBJPROP_PRICE2);
    x1=ObjectGetShiftByValue(nm1, y1);
    x2=ObjectGetShiftByValue(nm1, y2);
    
    y3=ObjectGet(nm2, OBJPROP_PRICE1);
    y4=ObjectGet(nm2, OBJPROP_PRICE2);
    x3=ObjectGetShiftByValue(nm2, y3);
    x4=ObjectGetShiftByValue(nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
    if(k1 != k3)
      {
      T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
  return(0);
  }

PS. Chiedo scusa all'autore di questo thread per aver postato il mio codice qui. Ho solo pensato che forse qualcuno ha lottato anche con l'attraversamento...

 
Shuba: Ho solo pensato che forse qualcuno ha anche lottato con i crossover...

Mi viene in mente (già negli Annali):

Novozar 23.07.2011 12:18
Per favore, ditemi la via d'uscita. Ho un indicatore chiamato Average Directional Movement Index e disegna linee tratteggiate. Voglio catturare le linee di crossover. Non credo che sia necessario disegnare linee tratteggiate.
 
Shuba:

PS. Mi scuso con l'autore di questo thread per aver postato il mio codice qui. Ho solo pensato che forse qualcuno ha anche lottato con le intersezioni...

Tutto a posto. Perdonatelo...
 
Shuba:
Ho modificato un po' la funzione. Ora calcola le intersezioni senza crash.
Parametri di ingresso: |
nm1 - nome della prima linea |

nm2 - nome della seconda linea

uscita M - livello dei prezzi.

PS. Chiedo scusa all'autore di questo thread per aver postato il mio codice qui. Ho solo pensato che forse qualcuno ha lottato anche con l'attraversamento...

Bene, forse questa funzione dovrebbe restituire proprio questo livello di prezzo (come nella variante precedente)! Inoltre, c'è una variabile "T" non dichiarata nel tuo codice.
 
TarasBY:
Bene, forse questa funzione dovrebbe restituire proprio questo livello di prezzo (come nella variante precedente)! Inoltre, il tuo codice contiene una variabile "T" non dichiarata.

Beh, lo restituisce)

sulle variabili non dichiarate - mi dispiace. Mi correggo.

doppio M - livello di prezzo di attraversamento. Questa variabile è dichiarata all'inizio.

void Middle(string nm1,string nm2)
  {
  double x1, x2, x3, x4;
  double y1, y2, y3, y4;
  double k1, k3;
  
  if(ObjectFind(nm1)==0 && ObjectFind(nm2)==0)
    {
    y1=ObjectGet(nm1, OBJPROP_PRICE1);
    y2=ObjectGet(nm1, OBJPROP_PRICE2);
    x1=ObjectGetShiftByValue(nm1, y1);
    x2=ObjectGetShiftByValue(nm1, y2);
    
    y3=ObjectGet(nm2, OBJPROP_PRICE1);
    y4=ObjectGet(nm2, OBJPROP_PRICE2);
    x3=ObjectGetShiftByValue(nm2, y3);
    x4=ObjectGetShiftByValue(nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
    if(k1 != k3)
      {
      double T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
  return(0);
  }

Il trailer è un Expert Advisor per vedere come funziona la funzione.

 

Non sono riuscito a caricarlo subito...

File:
proba_per_1.mq4  11 kb
 
Shuba:

Non sono riuscito a farlo caricare subito...


Non dovresti agitare le acque, IMHO - bombardare le librerie di funzioni con descrizioni qui e questo è tutto...

Chi ne ha bisogno lo troverà.

 

La funzione ClosePosByTakeProfitZone().

Questa funzione chiude una posizione al prezzo di mercato se il prezzo si blocca per un certo numero di barre nella zona vicina al TakeProfit o cerca di uscire da questa zona. La selezione delle posizioni da chiudere è specificata tramite parametri esterni:

  • sy - Nome dello strumento. Se impostiamo questo parametro, la funzione controllerà solo le posizioni dello strumento specificato. NULL significa strumento corrente, mentre "" (default) significa qualsiasi strumento.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione (MagicNumber). Il valore predefinito di -1 significa qualsiasi MagicNumber.
  • tf - Timeframe del grafico, su cui contare le barre, durante le quali il prezzo si trova nella zona TakeProfit. Il valore predefinito 0 è l'intervallo di tempo corrente.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.04.2012                                                     |
//|  Описание : Закрытие позиций при нахождении цены в зоне TakeProfit         |
//|             в течение заданного количества баров,                          |
//|             а также при попыте выйти из этой зоны.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    tf - таймфрейм                  ( 0   - текущий таймфрейм)              |
//+----------------------------------------------------------------------------+
void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
  double pa, pb, po, pp, tp;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
          else {
            if (OrderType()==OP_BUY) {
              RefreshRates();
              pb=MarketInfo(OrderSymbol(), MODE_BID);
              pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
              tp=OrderTakeProfit()-TP.ZonePoint*po;
              if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
            }
            if (OrderType()==OP_SELL) {
              RefreshRates();
              pa=MarketInfo(OrderSymbol(), MODE_ASK);
              pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
              tp=OrderTakeProfit()+TP.ZonePoint*po;
              if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
            }
          }
        }
      }
    }
  }
}
In allegato c'è un Expert Advisor per testare la funzione ClosePosByTakeProfitZone(). è possibile testarlo sia nel tester che online.
 

Buona sera, Igor!

Ho iniziato a studiare le vostre funzioni non molto tempo fa, a pagina 36 non ho capito bene le funzioni, per favore aiutatemi a capire:


Funzione GetArrowInterval().


//+------------------------------------------------------------------+
//| Restituisce l'intervallo di impostazione del puntatore del segnale |
//+------------------------------------------------------------------+
int GetArrowInterval() {
int p = Period();

switch (p) {
caso 1: return(4);
caso 5: return(5);
caso 15: return(6);
caso 30: return(8);
caso 60: return(10);
caso 240: return(20);
caso 1440: return(40);
caso 10080: return(80);
caso 43200: return(150);
} xml-ph-0015@deep

cioè questa funzione è stata usata per impostare le frecce usando la funzione SetArrow(), cioè invece del livello di prezzo nella linea ObjectCreate(nm, OBJ_ARROW, 0, 0,0), ditemi come è successo, non mi è chiaro cosa significano i valori di ritorno (4,5,6,8,10....)


Anche la nuova versione della funzione rimane poco chiara:





//+----------------------------------------------------------------------------+
//| Autore: Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versione: 12.10.2007 |
//+----------------------------------------------------------------------------+
//| Descrizione: restituisce l'intervallo del puntatore del segnale |
//| Parametri: |
//| pr - percentuale relativa alla dimensione del prezzo della finestra |
//+-------------------

ritorno((WindowPriceMax()-WindowPriceMin())/100*pr/Point);


La funzione WindowPriceMax() restituisce il valore massimo della scala verticale, cioè questo è il valore massimo del prezzo, ma su quale periodo?

E grazie per il tuo duro lavoro....))))

 
Lisi4ka330:

Ho iniziato a studiare le vostre funzioni non molto tempo fa, a pagina 36 non ho capito bene le funzioni, per favore aiutatemi a capire:

cioè questa funzione è stata usata per impostare le frecce usando la funzione SetArrow(), cioè invece del livello di prezzo nella linea ObjectCreate(nm, OBJ_ARROW, 0, 0,0), dimmi come è stato fatto...

Devi aver frainteso lo scopo di queste funzioni. Non operano con i prezzi e non mettono icone; restituiscono solo la distanza in pip a seconda del timeframe corrente. Si prega di fare riferimento all'immagine qui sotto.

Se si posiziona tale marcatore non vicino al prezzo, ma a una certa distanza e per esempio sul timeframe H1, e poi si passa a M1, probabilmente non si vedrà il marcatore. La scala cambierà e l'icona andrà molto in basso o in alto. Le funzioni che hai menzionato sono progettate per garantire che le icone siano sempre visibili sul grafico in qualsiasi timeframe.

Lisi4ka330:

...cosa significano i valori di ritorno (4,5,6,8,10....)

Distanza in pip, a seconda del timeframe corrente.


Lisi4ka330:

La funzione WindowPriceMax() restituisce il valore massimo della scala verticale, cioè è il valore massimo del prezzo, ma su quale periodo?

Non per qualsiasi periodo... Solo nella finestra corrente. Per esempio, nella figura qui sotto, il prezzo massimo è 97,35