Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
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 »

Szymon_P pisze:
10 gru 2021, 22:08
Witam,
mam skrypt, którym obliczam Time1, Time2, PoziomMAX, PoziomMIN, PoziomSredni. Zastanawiam się jak obliczyć Time3 czyli czas kiedy cena osiągnęła poziom średni/środkowy (np. na której świecy H1).
Z iBarShift() tej świecy, która zawiera tę cenę średnią.
Musisz ją odszukać w pętli for() w zakresie od iBarShift() z Time1 do iBarShift() Time2.
Jeżeli jest takich świec więcej, to komplikuje sprawę.
Będzie zależeć od tego, co chcesz w takim wypadku odczytać.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

rookie2
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 29 wrz 2020, 00:10

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

Nieprzeczytany post autor: rookie2 »

ninjaproject pisze:
10 gru 2021, 23:22
Szymon_P pisze:
10 gru 2021, 22:08
Witam,
mam skrypt, którym obliczam Time1, Time2, PoziomMAX, PoziomMIN, PoziomSredni. Zastanawiam się jak obliczyć Time3 czyli czas kiedy cena osiągnęła poziom średni/środkowy (np. na której świecy H1).
Z iBarShift() tej świecy, która zawiera tę cenę średnią.
Musisz ją odszukać w pętli for() w zakresie od iBarShift() z Time1 do iBarShift() Time2.
Jeżeli jest takich świec więcej, to komplikuje sprawę.
Będzie zależeć od tego, co chcesz w takim wypadku odczytać.
Do tego bym dodał że można np. obliczać odległość ceny high, low, close, open świecy z danego interwału np h1 w stosunku do tej średniej, do tego poziomu. I kiedy jest blisko tej wartości to świeca którą warto brać pod uwagę. A dokładniej to lepiej wyszukać świecy która np przecięła ten poziom, czyli otwarcie, albo low było pod średnią a zamknięcie i high już nad. Cyli znowu masz zakres górnej i dolnej ceny i w warunku sprawdzasz czy cena z tej średniej znajduje się wewnątrz tego zakresu.

Kod: Zaznacz cały

double avgPrice = 1.2560 // założmy ze to jest cena sredniej
if (high > avgPrice && low < avgPrice) {
	// czyli sprawdzasz czy ta cena ze średniej jest pomiędzy górną i dolną ceną z danej świecy
	// i robisz to operatorem AND &&. Mają być spełnione oba warunki.
	// I tak wyslekecjonujesz świece które przecinają tą średnią
	// Następnie z tego co widzę funkcja która zwraca indeks świecy to iBarShift https://docs.mql4.com/series/ibarshift
	// to jest potrzebne do funkcji iTime... bo 3 argument to indeks świecy
	// potem już tylko funkcja iTime, która przyjmuje 3 parametry https://docs.mql4.com/series/itime
	// i masz czas świecy które przecieły ten poziom
}
Coś takiego. To nie jest optymalne rozwiązanie, ale tak m.in. można z tym sobie poradzić.
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743

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

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

Nieprzeczytany post autor: LoCoToCo »

Siemanko, mam takie oto pytanie, gdyż moja wiedza z programowania nie jest wystarczająca. Czy ktoś na podstawie tego kodu(kod z tradingview) jest w stanie powiedzieć jakie warunki muszą być spełnione żeby pojawił się bar koloru fioletowego? Z komentarzy przeczytałem tylko, że rage jest większy, a wolumen mniejszy. Tylko w porównaniu do ilu poprzednich świeczek? I jak bardzo muszą się różnić te wartości?

Kod: Zaznacz cały

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JulyVibes

//@version=4
study("Volume per Point")

bsvol = input(title="Display Volume?", type=input.bool, defval=false, group="Multipliers")
vmul = input(title="Volume Multiplier", type=input.float, defval=1, group="Multipliers")
avp = input(title="Abnormal VP Multiplier", type=input.float, defval=2, group="Multipliers")

rf = input(title="Use RSI Filters?", type=input.bool, defval=false, group="Filters")
r1 = input(title="RSI Above", type=input.integer, defval=60, group="Filters")
r2 = input(title="RSI Below", type=input.integer, defval=40, group="Filters")

if rf
    r1 := r1
    r2 := r2
else
    r1 := 0
    r2 := 150

vf = input(title="Use Percent Filters?", type=input.bool, defval=true, group="Filters")
vper = input(title="Volume Percent Difference", type=input.integer, defval=5, group="Filters")
lper = input(title="Length Percent Difference", type=input.integer, defval=5, group="Filters")

hl = high-low
hl1 = high[1]-low[1]

nvol = volume/(hl)

rlen = input(title="RSI Length", type=input.integer, defval=14, group="Input Settings")
rsrc = input(title="RSI Source", type=input.source, defval= hl2, group="Input Settings")
vpma = input(title="MA", type=input.integer, defval=15, group="Input Settings")
ma = sma(nvol, vpma)

bvol = iff( (high==low), na, volume*(close-low)/(high-low))*vmul
svol = volume*vmul

if bsvol
    bvol := iff( (high==low), na, volume*(close-low)/(high-low))*vmul
    svol := volume*vmul
else
    bvol := na
    svol := na

dpaint = (hl < hl1) and (volume > volume[1])
epaint = (hl > hl1) and (volume < volume[1])
nvd = (nvol > nvol[1]) and (hl < hl[1])
nve = (nvol < nvol[1]) and (hl > hl[1])

adot = nvol
var color adotc = na

if ((nvol[1]*avp) < nvol) and (nvol > ma*avp)
    adot := nvol
    adotc := color(#ff0000)
else
    adot := na
    adotc := na

RSI = rsi(rsrc,rlen)

if vf
    dpaint := (hl*(lper/100+1) < hl1) and (volume > volume[1]*((vper/100)+1))
    epaint := (hl > hl1*(lper/100+1)) and (volume*((vper/100)+1) < volume[1])
else
    dpaint := dpaint
    epaint := epaint

var color a = na
var color b = na
var color c = na

if nvol > nvol[1]
    a := color.green
else
    a := color.red
    
if ((RSI > r1) or (RSI < r2)) and dpaint
    b := color.yellow
else
    b := na
    
if ((RSI > r1) or (RSI < r2)) and epaint
    c := color.purple
else
    c := na

plot(nvol, title="Net Change",color=a, linewidth=2, style=plot.style_columns)
plot(nvol, title="Volume Divergence",color=b, linewidth=2, style=plot.style_columns)
plot(nvol, title="Volume Exhaustion",color=c, linewidth=2, style=plot.style_columns)
plot(adot, title="Abnormal VP", color=adotc, linewidth=3, style=plot.style_circles)

plot(svol, title="Sell Volume", color=#e91e63, linewidth=10, style=plot.style_histogram)
plot(bvol, title="Buy Volume", color=color.lime, linewidth=10, style=plot.style_histogram)

barcolor(dpaint ? color(b) : na, title="Volume Divergence (candle)")
barcolor(epaint ? color(c) : na, title="Volume Exhaustion (candle)")

plot(ma, title="Moving Average")

rookie2
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 29 wrz 2020, 00:10

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

Nieprzeczytany post autor: rookie2 »

To jest ten skrypt https://www.tradingview.com/script/10Xm ... per-Point/

W liniach 97 i 98 jest podane co program oblicza, czyli volume divergence i exhausting, ponieważ tam wywoływana jest funkcja która ustawia kolor świecy "barcolor" (sugerując się nazwą) i używane są zmienne "color". Wartości tych zmiennych. W skrócie wygląda to tak że porównuje high i low aktualnej świecy z poprzednią (jedna świeca wstecz). Linie 26 i 27. Tam są te zmienne hl i hl1 które są potem używane do obliczenia dpaint i epaint w liniach 46 i 47. I jak sugerować się tym to faktycznie, żółta jest wtedy kiedy wartość odjęcia wierzchołka od dołka aktualnej świecy (aktualnie branej pod uwagę do obliczeń) w stosunku do poprzedniej. Czyli świeca jest mniejsza od poprzedniej. Natomiast wolumen jest większy. Wtedy jest dywergencja. Wyczerpanie jest kiedy świeca aktualna jest większa od poprzedniej, a wolumen aktualnej jest mniejszy od wolumenu poprzedniej. Wtedy jest fioletowa. To są linie 46 i 47 właśnie. Potem jest to użyte właśnie w warunkach w liniach 79 i 84 do wybrania koloru. I jest tam jeszcze sprawdzane RSI, którego wartości pobrane są na początku i przypisane jako r1 i r2 w liniach 12 i 13. Są to wartości domyślne 60 i 40, więc jeszcze aktualna wartość RSI jest porównywana do tych wartości i albo jest mniejsze albo większe od którejś wartości + ten epaint lub dpaint.

Czyli porównywana jest aktualna świeca z poprzednią, która tam została wyszukana wg tego. W lini 84 masz warunek dla fioletowej świecy, jeśli RSI jest większe od 60 (patrząc na to co jest przypisane do r1 na początku) LUB RSI jest mniejsze od 40 (tutaj bez znaczenia który warunek będzie ok, oba są brane pod uwagę, ale musi być do tego spełiony wynik epaint, czyli jeden z tych dwóch + epaint) ORAZ (I) wynik jaki zwraca epaint, czyli napisałem wyżej co tam jest obliczane. Wtedy jest fioletowa.

Czyli tak, range większy a wolumen mniejszy.
https://www.myfxbook.com/members/rookie_t/pycha-kroczy-przed-upadkiem/7931743

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 »

LoCoToCo pisze:
29 gru 2021, 01:14
Siemanko, mam takie oto pytanie, gdyż moja wiedza z programowania nie jest wystarczająca. Czy ktoś na podstawie tego kodu(kod z tradingview) jest w stanie powiedzieć jakie warunki muszą być spełnione żeby pojawił się bar koloru fioletowego? Z komentarzy przeczytałem tylko, że rage jest większy, a wolumen mniejszy. Tylko w porównaniu do ilu poprzednich świeczek? I jak bardzo muszą się różnić te wartości?
Kolor "purple" ma oznaczać słabość (oznaki wyczerpania) względem poprzedniej świecy.
Tylko względem poprzedniej świecy.
A różnić się mają o tyle, o ile sobie ustawisz.
Domyślnie jest tak:
VPP.jpg
PS. Nie ma wskaźników, które cokolwiek wiedzą, że tak jest obiektywnie, a inaczej nie.
Jak ustawisz, tak pokazują.
Nic poza tym.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Dzięki @rookie2 trochę zaczyna mi się rozjaśniać. @ninjaproject Wiem, że wskaźniki pokazują to co się ustawi, jednak wyłączając wszystkie filtry dostępne w ustawieniach wskaźnika jak określić jakie parametry muszą być spełnione żeby pojawił się kolor fioletowy? Tzn. chodzi mi o to o ile większa świeczka musi być od poprzedniej i o ile większy musi być volumen? Zakładałem, że może to być nawet wartość minimalna ale znalazłem, kilka świeczek, które teoretycznie powinny pasować jednak kolor fioletowy nie wystąpił.

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 »

LoCoToCo pisze:
29 gru 2021, 16:07
Dzięki @rookie2 trochę zaczyna mi się rozjaśniać. @ninjaproject Wiem, że wskaźniki pokazują to co się ustawi, jednak wyłączając wszystkie filtry dostępne w ustawieniach wskaźnika jak określić jakie parametry muszą być spełnione żeby pojawił się kolor fioletowy? Tzn. chodzi mi o to o ile większa świeczka musi być od poprzedniej i o ile większy musi być volumen? Zakładałem, że może to być nawet wartość minimalna ale znalazłem, kilka świeczek, które teoretycznie powinny pasować jednak kolor fioletowy nie wystąpił.
Z tego co czytam, kolor purple zależy od obliczenia zmiennej epaint, czy daje wynik true, czy false.
Jeżeli filtry RSI są wyłączone, to: r1 = 0, r2 = 150.
Bez filtrów procentowych:
epaint = (hl > hl1) and (volume < volume[1]) *
* To jest tak jak w MQL if, czyli wartość bool (true/false).
Z filtrami procentowymi:
epaint := (hl > hl1*(lper/100+1)) and (volume*((vper/100)+1) < volume[1])
Więc, bez filtrów procentowych jest po prostu tzw. dywergencja bez żadnego współczynnika proporcji.
Z filtrami procentowymi jest współczynnik lper i vper.
A filtr RSI jest dopiero po tym brany pod uwagę w zależności od wartości r1 i r2.
Jeżeli r1 =0 i r2 = 150, to tak jakby filtra RSI nie było.
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 »

Dzięki wielkie wszystko już łapię.

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

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

Nieprzeczytany post autor: LoCoToCo »

Mógłby ktoś mnie nakierować jak do tego skryptu dodać opcje aby słupek był zielony kiedy wartość jest większa niż poprzednia i czerwony kiedy jest mniejsza niż poprzednia?

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                           Range_Volume_Ratio.mq4 |
//|                               Copyright © 2014, Gehtsoft USA LLC |
//|                                            http://fxcodebase.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Gehtsoft USA LLC"
#property link      "http://fxcodebase.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Yellow

extern int Method=0; // 0 - Open/Close method
                     // 1 - High/Low method

double RVR[];

int init()
{
 IndicatorShortName("Range Volume Ratio oscillator");
 IndicatorDigits(Digits);
 SetIndexStyle(0,DRAW_HISTOGRAM);
 SetIndexBuffer(0,RVR);

 return(0);
}

int deinit()
{

 return(0);
}

int start()
{
 if(Bars<=3) return(0);
 int ExtCountedBars=IndicatorCounted();
 if (ExtCountedBars<0) return(-1);
 int limit=Bars-2;
 if(ExtCountedBars>2) limit=Bars-ExtCountedBars-1;
 int pos;
 pos=limit;
 while(pos>=0)
 {
  if (Method==0)
  {
   RVR[pos]=MathAbs(Open[pos]-Close[pos])/(Volume[pos]*Point);
  }
  else
  {
   RVR[pos]=(High[pos]-Low[pos])/(Volume[pos]*Point);
  }
  
  pos--;
 } 
 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 »

LoCoToCo pisze:
01 mar 2022, 19:23
Mógłby ktoś mnie nakierować jak do tego skryptu dodać opcje aby słupek był zielony kiedy wartość jest większa niż poprzednia i czerwony kiedy jest mniejsza niż poprzednia?
To wymaga przeróbki wskaźnika.
Szczegółowo jak to zrobić, to by wymagało całej lekcji, być może nie jednej, a kilku.
W załączeniu wskaźnik przerobiony według w/w pomysłu:
Range_Volume_Ratio_Color_(by Dadas).rar
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ