==EMPTY_VALUE oraz !=EMPTY_VALUE w tym samym czasie

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
thisredone
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 05 sie 2010, 17:07

==EMPTY_VALUE oraz !=EMPTY_VALUE w tym samym czasie

Nieprzeczytany post autor: thisredone »

Przy transakcji mam warunek:

Kod: Zaznacz cały

if(iCustom(NULL,0,"Slope Direction Line",15,3,0,0,0)!=EMPTY_VALUE)
//rob transakcje
I dla zamknięcia transakcji mam warunek:

Kod: Zaznacz cały

if(iCustom(NULL,0,"Slope Direction Line",15,3,0,0,0)==EMPTY_VALUE)
//zamknij transakcje
I przy testowaniu na historii często zdarza się, że jest transakcja jest zawierana i natychmiastowo zamykana. Jak więc wartość może być jednocześnie równa EMPTY_VALUE oraz nierówna EMPTY_VALUE ?

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

thisredone pisze:I przy testowaniu na historii często zdarza się, że jest transakcja jest zawierana i natychmiastowo zamykana. Jak więc wartość może być jednocześnie równa EMPTY_VALUE oraz nierówna EMPTY_VALUE ?
Wskaznik nie może miec równoczenie 2 wartości to po pierwsze.

Ale.
Tu nie musi byc wcale równocześnie, zamyka Ci to w tym samym ticku?
użyj sobie

Kod: Zaznacz cały

 
else
Jeżeli będzie dalej tak samo to znaczy, że to nie jets ten sam moment tylko np. następny tick. A to nic szczegolnego, wkaznik może miec empty w jednym ticku a w drugim nie.

Awatar użytkownika
thisredone
Stały bywalec
Stały bywalec
Posty: 72
Rejestracja: 05 sie 2010, 17:07

Nieprzeczytany post autor: thisredone »

nie mogę użyć else ze względu na budowę całości ale to nie ma znaczenia bo jest cała masa transakcji, które zamykają się zaraz po otwarciu

Nawet jeżeli wykluczyć by małe prawdopodobieństwo zdarzenia się takiej sytuacji to i tak sprawdzałem na wykresie z takimi samymi parametrami i tych zmian tam nie ma.

Z obserwacji wynika, że zawiera transakcje chociaż nie powinien.

Kod: Zaznacz cały

   if(iCustom(NULL,0,"Slope Direction Line",15,3,0,0,0)!=EMPTY_VALUE)
                        {
RefreshRates();
ticket=OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask,4), 0, NormalizeDouble(Ask-stop_loss*Point,Digits), NormalizeDouble(Ask+take_profit*Point,Digits),"puf",16384,0,Green);
                        }
i zawiera czasem transakcje mimo, że buffor o indeksie 0 ze Slope Direction Line jest równy EMPTY_VALUE

a zaraz po tym zamyka transakcję bo dochodzi do wniosku, że jednak jest równy EMPTY_VALUE

Kod: Zaznacz cały

if(OrdersTotal()!=0)
{
RefreshRates();
OrderSelect(ticket, SELECT_BY_TICKET);
      if(OrderType()==OP_BUY)
         {
            if(iCustom(NULL,0,"Slope Direction Line",15,3,0,0,0)==EMPTY_VALUE)
            OrderClose(ticket,lots,NormalizeDouble(Bid,4),0,Red);
         }
      else
         {
            if(iCustom(NULL,0,"Slope Direction Line",15,3,0,0,0)!=EMPTY_VALUE)
            OrderClose(ticket,lots,NormalizeDouble(Ask,4),0,Red);
         }
}
kod Slope Direction Line:
(init)

Kod: Zaznacz cały

int init() 
{ 
    IndicatorBuffers(3);  
    SetIndexBuffer(0, Uptrend); 
    //ArraySetAsSeries(Uptrend, true); 
    SetIndexBuffer(1, Dntrend); 
    //ArraySetAsSeries(Dntrend, true); 
    SetIndexBuffer(2, ExtMapBuffer); 
    ArraySetAsSeries(ExtMapBuffer, true); 
    
    SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
    SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
    
    IndicatorShortName("Slope Direction Line("+period+")"); 
    return(0); 
} 
(ustawianie wartości indeksów)

Kod: Zaznacz cały

    if (trend[x]>0)
    { Uptrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
      Dntrend[x] = EMPTY_VALUE;
    }
    else              
    if (trend[x]<0)
    { 
      Dntrend[x] = ExtMapBuffer[x]; 
      if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
      Uptrend[x] = EMPTY_VALUE;
    } 
Czyli ustawia jeden indeks na EMPTY_VALUE gdy inny jest różny od EMPTY_VALUE.

ODPOWIEDZ