Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
lxi
Stały bywalec
Stały bywalec
Posty: 59
Rejestracja: 28 sty 2014, 14:04

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: lxi »

Dobra, już wiem co jest. Coś nie gra z plikiem wskaźnika, który mam u siebie. Gdy ściągnąłem tę wersję, którą wstawiłeś kilka postów wcześniej, wszystko śmiga jak należy.

Wielkie dzięki za pomoc i do następnego...problemu:)

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Jeżeli miałeś np. starszą wersję MQL4 w tym .ex4, to starsze wersje często bywają niekompatybilne.
Trochę inna była składnia. I mając tylko .ex4 nie poprawisz kodu.
Wiesz, w necie zwykle łatwo znaleźć .mq4. Mnie to zjęło kilka sekund.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

lxi
Stały bywalec
Stały bywalec
Posty: 59
Rejestracja: 28 sty 2014, 14:04

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: lxi »

Masz rację, tylko nawet nie szukałem .mq4 bo nie był mi potrzebny.

lxi
Stały bywalec
Stały bywalec
Posty: 59
Rejestracja: 28 sty 2014, 14:04

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: lxi »

Witam ponownie, tak w ramach treningu podjąłem się pewnej rzeczy ale utknąłem. Mam wskaźnik typu oscylator, który rysuje dwie linie, które przecinają się co jakiś czas. Na ten wskaźnik wrzuciłem wskaźnik Williams' Percent Range, ponieważ potrzebuję z niego tylko poziomy "-20" i "-80".

Obrazek

Chciałbym uchwycić moment przecięcia niebieskiej z czerwoną ale tylko nad poziomem "-20" lub pod poziomem "-80". Rzecz w tym, że utknąłem na odczytaniu wartości "-20" i "-80" z WPR. Wiem jak odczytać wszelkie parametry wskaźnika ale z poziomami jest problem. Szukałem rozwiązania na forum MQL ale bez rezultatu.

Może ktoś próbował już takich rzeczy lub ma pomysł na rozwiązanie mojego problemu... Może też być tak, że w MQL4 jest to niemożliwe do zrobienia.

Będę wdzięczny za odzew :564:

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Hmmm, to co napisałeś nie ma logicznego sensu...
Umiesz odczytać bufory danego wskaźnika, a poziomów nie???
Przecież wartośc danej linii wskaźnika odpowiada poziomowi w podoknie.

Natomiast, nie możesz wymagać, żeby inny wskaźnik nałożony na inny odczytywał poziomy tego pierwszego...

W tym WPR.mq4 jest tylko jeden bufor.
Odczytujesz wartość tego buforu, ona może być od 0 do 100, więc jaki problem?

A wskaźnik STI_OBOS nie ma/nie zna poziomów z WPR, więc potrzebujesz dla [ i ] odczytać wartość jednego i drugiego, i
wtedy porównać.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

W praktyce to powinno wyglądać tak:

Kod: Zaznacz cały

if(STI_OBOS_Value1[i+2]>STI_OBOS_Value2[i+2]&&STI_OBOS_Value1[i+1]<STI_OBOS_Value2[i+1]&&WPR[i+1]>-20)
 {
 Execute_Sell();
 }
if(STI_OBOS_Value1[i+2]<STI_OBOS_Value2[i+2]&&STI_OBOS_Value1[i+1]>STI_OBOS_Value2[i+1]&&WPR[i+1]<-80)
 {
 Execute_Buy();
 }
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

SuchyRyz
Bywalec
Bywalec
Posty: 19
Rejestracja: 26 lis 2017, 23:24

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: SuchyRyz »

Witam, mam dosyć banalne pytanie jednak nie jestem programistą i problem mnie przerósł. Otóż mam znalazłem wskaźnik o dosyć prostej formule tzn. wartość rsi/wartość cci. I teraz jeśli zmienić cci na np. williams percent range, to w którym miejscu w kodzie muszę dokonać zmian?
Dodam, że próbowałem już zmienić wszystkie hasła cci na williams percent range i wywala mi błąd w 74 wierszu.

Kod: Zaznacz cały

// More information about this indicator can be found at:
//http://fxcodebase.com/code/viewtopic.php?f=38&t=69516

//+------------------------------------------------------------------+
//|                               Copyright © 2020, Gehtsoft USA LLC | 
//|                                            http://fxcodebase.com |
//+------------------------------------------------------------------+
//|                                      Developed by : Mario Jemic  |
//|                                           mario.jemic@gmail.com  |
//|                          https://AppliedMachineLearning.systems  |
//+------------------------------------------------------------------+
//|                                 Support our efforts by donating  |
//|                                  Paypal : https://goo.gl/9Rj74e  |
//|                                 Patreon : https://goo.gl/GdXWeN  |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2020, Gehtsoft USA LLC"
#property link      "http://fxcodebase.com"
#property version   "1.0"
#property strict

input int Period1 = 14; // CCI Period
input int Period2 = 14; // RSI Period
input bool Reverse = false; // Reverse

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

string IndicatorName;
string IndicatorObjPrefix;

string GenerateIndicatorName(const string target)
{
   string name = target;
   int try = 2;
   while (WindowFind(name) != -1)
   {
      name = target + " #" + IntegerToString(try++);
   }
   return name;
}

double Oscillator[];

int init()
{
   IndicatorName = GenerateIndicatorName("RSI CCI Ratio");
   IndicatorObjPrefix = "__" + IndicatorName + "__";
   IndicatorShortName(IndicatorName);

   IndicatorBuffers(1);

   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, Oscillator);
   SetIndexLabel(0, "Oscillator");

   return 0;
}

int deinit()
{
   ObjectsDeleteAll(ChartID(), IndicatorObjPrefix);
   return 0;
}

int start()
{
   int counted_bars = IndicatorCounted();
   int minBars = 1;
   int limit = MathMin(Bars - 1 - minBars, Bars - counted_bars - 1);
   for (int i = limit; i >= 0; i--)
   {
      double cciValue = iCCI(_Symbol, _Period, Period1, PRICE_CLOSE, i);
      double rsiValue = iRSI(_Symbol, _Period, Period2, PRICE_CLOSE, i);
      if (Reverse)
      {
         if (rsiValue != 0)
         {
            Oscillator[i] = cciValue / rsiValue;
         }
      }
      else
      {
         if (cciValue)
         {
            Oscillator[i] = rsiValue / cciValue;
         }
      }
   }
   return 0;
}

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

To nie działa tak, że sobie coś podmienisz, jeżeli nie rozumiesz co czytasz i nie wiesz co napisać.
Jeżeli chcesz mieć dane z innego wskaźnika, to potrzebujesz je z niego pobrać.
Dla wskaźników domyślnie dostarczanych w MT4 są gotowe funkcje, takie jak iCCI() i iRSI(), które w tym wskaźniku pobierają dane z buforów tych wskaźników.
Dla innych wskaźników, tzw. custom, trzeba napisać funkcję iCustom() i przez nią pobrać dane z odpowiednich buforów, a potem z nimi zrobić co potrzeba.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

A poza tym, to ja tu jeszcze widzę błąd logiczny, w tym kodzie.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

SuchyRyz
Bywalec
Bywalec
Posty: 19
Rejestracja: 26 lis 2017, 23:24

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: SuchyRyz »

Ahhh, czyli jednak będę musiał poprosić kogoś o pomoc :/
Mogę zapytać w w którym miejscu jest ten błąd? Wskaźnik na podstawie tego kodu działa bez zarzutu.

ODPOWIEDZ