Wskaźnik i warunek z innego TF

O jezykach programowania w platformach i nie tylko.
adple
Bywalec
Bywalec
Posty: 6
Rejestracja: 11 mar 2011, 10:22

Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: adple »

Witam serdecznie.
Czy pomógł by mi ktoś w przebudowaniu tego kodu tak aby mogł zawierać warunki z innego TF (M5 i M15)
Bieżący kod daje błędne wskazania :(

Kod: Zaznacz cały

#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description "m5/m15"

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 1

#property indicator_type1 DRAW_ARROW
#property indicator_width1 1
#property indicator_color1 0xFFE600
#property indicator_label1 "Buy"

//--- indicator buffers
double Buffer1[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | CCI_Ind @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(1);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) <= -90 //Commodity Channel Index >= fixed value
      && iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) >= iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, 1+i) //Commodity Channel Index >= Commodity Channel Index
      && iCCI(NULL, PERIOD_M5, 80, PRICE_TYPICAL, i) <= -70 //Commodity Channel Index >= fixed value
      )
        {
         Buffer1[i] = Low[i] - iATR(NULL, PERIOD_CURRENT, 14, i) - 4 * myPoint; //Set indicator value at Candlestick Low - Average True Range - fixed value
        }
      else
        {
         Buffer1[i] = 0;
        }
     }
   return(rates_total);
  }
Pozdrawiam

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: -rookie- »

Jeśli chcesz żeby wskazywało wg timeframe które przełączasz w górnym pasku MT4 to zmień linie gdzie masz zadeklarowane PERIOD_M5

Kod: Zaznacz cały

if(iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) <= -90 //Commodity Channel Index >= fixed value
      && iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) >= iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, 1+i) //Commodity Channel Index >= Commodity Channel Index
      && iCCI(NULL, PERIOD_M5, 80, PRICE_TYPICAL, i) <= -70 //Commodity Channel Index >= fixed value
Na Period()

Kod: Zaznacz cały

 if(iCCI(NULL, Period(), 14, PRICE_TYPICAL, i) <= -90 //Commodity Channel Index >= fixed value
      && iCCI(NULL, Period(), 14, PRICE_TYPICAL, i) >= iCCI(NULL, Period(), 14, PRICE_TYPICAL, 1+i) //Commodity Channel Index >= Commodity Channel Index
      && iCCI(NULL, Period(), 80, PRICE_TYPICAL, i) <= -70 //Commodity Channel Index >= fixed value
Wtedy będzie wskazywało wg danego TF na który się przełączysz.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

adple
Bywalec
Bywalec
Posty: 6
Rejestracja: 11 mar 2011, 10:22

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: adple »

Nie to miałem ma myśli. Może nie wyraziłem się precyzyjnie ale jeżeli w bieżącym kodzie wstawię Np:

Kod: Zaznacz cały

if(iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) <= -90 //Commodity Channel Index >= fixed value
      && iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) >= iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, 1+i) //Commodity Channel Index >= Commodity Channel Index
     && iCCI(NULL, PERIOD_M15, 14, PRICE_TYPICAL, i) <= -70 //Commodity Channel Index >= fixed value
to na TF 5 nie daje właściwych wskazań odczytanych z TF15.
Ma to jakiś związek rysowaniem strzałki na ostatniej świeczce.

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: -rookie- »

adple pisze:to na TF 5 nie daje właściwych wskazań odczytanych z TF15.
Ma to jakiś związek rysowaniem strzałki na ostatniej świeczce.
W ogóle nie rozumiem o co Tobie chodzi teraz. To zrób 2 pliki jeden z tym kodem, jeden nazwij wskaźnik1, drugi wskaźnik2, i w pierwszym w tych liniach daj PERIOD_M5 w drugim PERIOD_M15 i potem wrzuć oba wskaźniki na wykres. Kompletnie nie rozumiem do czego zmierzasz, ale może chodzi o to że chcesz widzieć sygnały z M15 na wykresie M5. Wtedy zrób np te dwa wskaźniki, wrzuć oba na wykres i jeden będzie pokazywał M5 a drugi M15.
https://docs.mql4.com/constants/chartco ... timeframes

adple
Bywalec
Bywalec
Posty: 6
Rejestracja: 11 mar 2011, 10:22

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: adple »

Chciałbym mieć jeden wskaźnik dla TF5 który zawiera sygnał z TF5 i TF15.
Kod działa jeżeli mam:

Kod: Zaznacz cały

if(iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) <= -90 //Commodity Channel Index >= fixed value
      && iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, i) >= iCCI(NULL, PERIOD_M5, 14, PRICE_TYPICAL, 1+i) //Commodity Channel Index >= Commodity Channel Index
     
natomiast jeśli dodam linijkę z PERIOD_M15

Kod: Zaznacz cały

      && iCCI(NULL, PERIOD_M15, 80, PRICE_TYPICAL, i) <= -70 //Commodity Channel Index >= fixed value
to ten dodatkowy sygnał daje błędne wskazania.

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: -rookie- »

To możesz zrobić jak napisałem, zrobić 2 pliki z tym kodem i dać w jednym PERIOD_M5 czyli zostawić jak jest, a w drugim zmienić na PERIOD_M15 i potem te 2 wskaźniki wrzucasz na wykres i daje to taki sam efekt. Nie wiem jak chcesz połączyć te sygnały ze sobą w inny sposób. Ja tak to rozumiem, dalej nie pomoge niestety.

W sensie masz stworzyć 2 pliki w folderze MQL4\Indicators np. wskaznik1.mq4 i wskaznik2.mq4 i w jednym ma być PERIOD_M5 w tym miejscu a w drugim PERIOD_M15. I potem wrzucasz oba wskaźniki na wykres.

adple
Bywalec
Bywalec
Posty: 6
Rejestracja: 11 mar 2011, 10:22

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: adple »

-rookie-
Wrzucenie tylko jednego warunku:

Kod: Zaznacz cały

iCCI(NULL, PERIOD_M15, 14, PRICE_TYPICAL, i) <= -120 
daje mi inne wskazania pod wykresem TF5 niż te w wykresie TF15
Autor strony (EABuilder) z której pochodzi ten kod opisał to tak:
"
it's a multi timeframe indicator (using different time frames than the
current chart). The problem with multiple timeframes is that it will
plot an arrow only on the last bar. You will receive indicator alerts
correctly, however you won't see the correct historical arrows.

It is because of the fact that one previous bar on two different
timeframes does not occur at the same time.

It will show the last arrow correctly because the indicator is
calculated tick by tick at once on all time frames that are being used.
Any audible alerts will be displayed correctly because they occur based
on calculation on the last bar."

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: -rookie- »

Nie rozumiem Twojego problemu, ktoś inny musi Ci pomóc.

adple
Bywalec
Bywalec
Posty: 6
Rejestracja: 11 mar 2011, 10:22

Re: Wskaźnik i warunek z innego TF

Nieprzeczytany post autor: adple »

ok, dzięki za chęć pomocy :)

ODPOWIEDZ