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 »

ninjaproject pisze:
07 maja 2020, 11:21
iCustom() masz źle napisaną.
Trzeba wprowadzić po kolei wszystkie parametry wskaźnika!
Twoja iCustom() bierze ustawienia domyślne wskaźnika, czyli takie, jak są przy pierwszym wrzuceniu wskaźnika na wykres.
Dlatego mogą być nie odczytywane bufory, lub mieć wartość 0.
No i rewelacja, znów nauczyłem się czegoś nowego.
Właśnie chodziło o to, że jeśli nie wpisałem parametrów, to wskaźnik robił odczyty przy ustawieniach standardowych.

Wystarczyło zmienić na:

Kod: Zaznacz cały

Arrow = NormalizeDouble(iCustom(NULL, PERIOD_CURRENT, "Renko_Trade_Panel_Pro_Alarm_v1.0", True, False, True, i, 3),4);
i wszystko gra.

A swoją drogą pętla bardzo dobrze się sprawdza i wynik printa jaki otrzymałem to: "Wartość z bufora 25 = 10726.6586"


Kolejny raz dziękuje za pomoc

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 »

Mam jeszcze pytanie, być może banalne, ale nigdy tego nie robiłem i nie bardzo wiem jak się za to zabrać.
Czy jest możliwość odczytania ustawień wskaźnika i w zależności od tego jakie one są, aby robot wykonywał różne akcje?
Dokładnie chodzi o ustawienia :
2.png
Jeśli jest TRUE, to wykonaj to, jeśli jest FALSE, to wykonaj co innego.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

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 nie mamy kodu źródłowego, mq4, to nie bardzo jest jak.
W kodzie źródłowym można wyrzucić GlobalVariableSet() i potem w EA odczytać.
A bez kodu źródłowego to tylko w EA możesz napisać te same parametry w input.
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 »

PS, poza tym to się zgadza, otrzymałeś wartość buforu 25 dla świecy 3, bo to była pierwsza wartość >0 buforu od 0 - 40 dla świecy nr. 3.
Innych świec nie badałeś.
Dlaczego interesuje cię akurat świeca nr. 3?
Tzn. Renko Bar nr 3?
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 »

ninjaproject pisze:
07 maja 2020, 13:13
Dlaczego interesuje cię akurat świeca nr. 3?
Tzn. Renko Bar nr 3?
Bo akurat na trzecim barze pojawiła mi się strzałka i chciałem sprawdzić odczyty z buforów aby sprawdzić czy odczytuje dobrze.

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 ty czytasz specyfikację MQL4?
Wszystko jest tam wyjaśnione.
https://docs.mql4.com/indicators/icustom
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

MireQs
Uczestnik
Uczestnik
Posty: 1
Rejestracja: 02 lip 2015, 01:37

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

Nieprzeczytany post autor: MireQs »

Witam, pytanie takie , jest wskaźnik skompilowany, wiec nie mam kodu źródłowego, generuje sygnał alarmem w osobnym oknie , czy jest jakiś sposób aby przechwycić komunikat alarmu do potrzeb EA jako parametr wejściowy? Czy to w ogóle jest jest możliwe ?

Funkcja Alert nie zwraca żadnej wartości . Ktoś ma jakiś pomysł lub poradę ?

Displays a message in a separate window.
void Alert(
argument, // first value
... // other values
);
Parameters
argument
[in] Any values separated by commas. To split the information output in several lines you can use the line feed characters "\r\n". The number of parameters can not exceed 64.

Return Value

No return value.

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 »

1. Napisać w EA te same warunki, które dotyczą tego alarmu.
2. Poszukać kodu źródłowego.
3. Odczytać log.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

LoCoToCo
Bywalec
Bywalec
Posty: 17
Rejestracja: 24 maja 2020, 16:40

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

Nieprzeczytany post autor: LoCoToCo »

Cześć, chciałbym przerobić wskaźnik który był tutaj wrzucony kilka stron temu. Programista ze mnie żaden jednak w szkole coś tam miałem z programowania więc nie wydaje mi się to problemem. Chodzi mi dokładniej o funkcję iCustom, umiem ją napisać jednak nie wiem w którym miejscu w kodzie mam ją napisać. Dodatkowo jak to wygląda w sytuacji kiedy muszę pobrać buffor z 2 różnych wskaźników nie załączonych w mt4? Kod tego wskaźnika co był tutaj wrzucany wygląda tak:

Kod: Zaznacz cały

 //+------------------------------------------------------------------+
//|                                                      CCI_RSI.mq4 |
//|                        Copyright 2019, Dariusz Surdel aka. Dadas |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Gehtsoft USA LLC"
#property link      "http://fxcodebase.com"
#property version   "1.0"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 clrRed

input int Period1 = 14; // CCI Period
input int Period2 = 14; // RSI Period
input bool WPR    = false; // CCI -> WPR
input int Period3 = 14; // WPR Period
input bool Reverse = false; // Reverse

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[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(!WPR)
   IndicatorName = GenerateIndicatorName("RSI CCI Ratio");
   if(WPR)
   IndicatorName = GenerateIndicatorName("RSI WPR Ratio");
   
   IndicatorObjPrefix = "__" + IndicatorName + "__";
   IndicatorShortName(IndicatorName);

   IndicatorBuffers(1);

   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, Oscillator);
   SetIndexLabel(0, "Oscillator");
   
//---
   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 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);
      double wprValue = iWPR(_Symbol, _Period, Period3, i);
      if(!WPR)
       {
      if (Reverse)
      {
         if (rsiValue != 0)
         {
            Oscillator[i] = cciValue / rsiValue;
         }
      }
      else
      {
         if (cciValue != 0)
         {
            Oscillator[i] = rsiValue / cciValue;
         }
      }
      }
      if(WPR)
       {
      if (Reverse)
      {
         if (rsiValue != 0)
         {
            Oscillator[i] = wprValue / rsiValue;
         }
      }
      else
      {
         if (wprValue != 0)
         {
            Oscillator[i] = rsiValue / wprValue;
         }
      }
      }
      
   }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
// 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  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectsDeleteAll(ChartID(), IndicatorObjPrefix);
}
//+------------------------------------------------------------------+ 

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 »

Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ