Wszystkie pytania dozwolone początkujących programistów
- siersciuch
- Pasjonat
- Posty: 407
- Rejestracja: 06 kwie 2010, 20:31
iBarShift zwraca numer słupka w zależności od podanej godziny. Wiec robisz coś takiego np
iOpen( Symbol(), 60, iBarShift( Symbol(), 60, czas_, ) )
A teraz w zamian chciałbym wiedzieć jak rozwiązać jedną rzecz i/lub zrozumieć jak działają tablice.
Problem wygląda tak, ze dla każdego słupka chcę sprawdzić czy i ile pewnych zależności wystąpiło 500 słupków przed nim. Aktualnie robię to na piechotę i po prostu za każdym razem mielę te 500 słupków, więc każdy słupek jest mielony 500 razy tak na dobrą sprawę. Mielę więc Bars - 500 .... 500 razy i 500 razy zapisuje informacje do tablicy, po czym odczytuje z tablicy...czyszczę i tak w koło macieja.
Wydajniejsze już na pewno będzie, mielenie wszystkich słupków raz i później sprawdzanie po prostu 500 poprzednich bez zapisywania tego do tablicy nieustannie.
I tu pojawia się moje pytanie. Tablice mam "SetAsSeries", więc jak wygląda dopisywanie rzeczy do tablicy? Muszę mielić całą tablicę od początku, czy jest możliwość dopisania kolejnego elementu i przesunięcia pozostałych o jedno miejsce?
EDIT
Znalazłem
http://www.forexfactory.com/showthread. ... ost2878455
Tak, jakby ktoś miał podobny problem.
iOpen( Symbol(), 60, iBarShift( Symbol(), 60, czas_, ) )
A teraz w zamian chciałbym wiedzieć jak rozwiązać jedną rzecz i/lub zrozumieć jak działają tablice.
Problem wygląda tak, ze dla każdego słupka chcę sprawdzić czy i ile pewnych zależności wystąpiło 500 słupków przed nim. Aktualnie robię to na piechotę i po prostu za każdym razem mielę te 500 słupków, więc każdy słupek jest mielony 500 razy tak na dobrą sprawę. Mielę więc Bars - 500 .... 500 razy i 500 razy zapisuje informacje do tablicy, po czym odczytuje z tablicy...czyszczę i tak w koło macieja.
Wydajniejsze już na pewno będzie, mielenie wszystkich słupków raz i później sprawdzanie po prostu 500 poprzednich bez zapisywania tego do tablicy nieustannie.
I tu pojawia się moje pytanie. Tablice mam "SetAsSeries", więc jak wygląda dopisywanie rzeczy do tablicy? Muszę mielić całą tablicę od początku, czy jest możliwość dopisania kolejnego elementu i przesunięcia pozostałych o jedno miejsce?
EDIT
Znalazłem
http://www.forexfactory.com/showthread. ... ost2878455
Tak, jakby ktoś miał podobny problem.
- siersciuch
- Pasjonat
- Posty: 407
- Rejestracja: 06 kwie 2010, 20:31
a ten TIme jak wpisać jak chce np o 10 rano świece ??Ribelo pisze:iBarShift zwraca numer słupka w zależności od podanej godziny. Wiec robisz coś takiego np
iOpen( Symbol(), 60, iBarShift( Symbol(), 60, Hour()=10, ) )
Jak chce pierwsza świece która pojawi sie o 10 rano to w czas musze dać?
Hour()=10 ??
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.
hej,
jestem w trakcie pisania komend ktore dosc istotnie ulatwia mi zycie w codziennym tradingu i jedną z czesci jest nastepujacy problem na jaki natrafilem. mianowicie chcialbym znac wartosc ostatniego dolka/szczytu ktory rysuje ponizej zalaczony wskaznik. jest to nic innego jak wskaznik zigzak ktory rysuje kolejne impulsy i korekty. samo rozpoznanie takiego punktu jest dosc latwie - mianowicie moja koncepcja opiera sie na rozpoznaniu wartosci wskaznika ze swiecy 0,-1,-2.
w momencie kiedy -1<-2 && -1<0 to jest to dołek. analogicznie nalezy zapisac warunek jesli szukamy szczytu. problem polega na tym ze chcialbym aby taki warunek byl szukany dla ostatniej takiej sytuacji poniewaz tylko wtedy wiemy ze jest to ostatni dolek/szczyt i jest to dogodne miejsce do przestawienia stop lossa (na koncu ostatniej korekty). nie chcialbym przeszukiwac tego na niezliczona liczbe swiec do tylu, a tylko zeby wyrzucalo mi wartosc ostatniej zarejestrowanej takiej sytuacji. bede wdzieczny za pomoc i wszelkie podpowiedzi. z gory dziekuje.
jestem w trakcie pisania komend ktore dosc istotnie ulatwia mi zycie w codziennym tradingu i jedną z czesci jest nastepujacy problem na jaki natrafilem. mianowicie chcialbym znac wartosc ostatniego dolka/szczytu ktory rysuje ponizej zalaczony wskaznik. jest to nic innego jak wskaznik zigzak ktory rysuje kolejne impulsy i korekty. samo rozpoznanie takiego punktu jest dosc latwie - mianowicie moja koncepcja opiera sie na rozpoznaniu wartosci wskaznika ze swiecy 0,-1,-2.
w momencie kiedy -1<-2 && -1<0 to jest to dołek. analogicznie nalezy zapisac warunek jesli szukamy szczytu. problem polega na tym ze chcialbym aby taki warunek byl szukany dla ostatniej takiej sytuacji poniewaz tylko wtedy wiemy ze jest to ostatni dolek/szczyt i jest to dogodne miejsce do przestawienia stop lossa (na koncu ostatniej korekty). nie chcialbym przeszukiwac tego na niezliczona liczbe swiec do tylu, a tylko zeby wyrzucalo mi wartosc ostatniej zarejestrowanej takiej sytuacji. bede wdzieczny za pomoc i wszelkie podpowiedzi. z gory dziekuje.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- siersciuch
- Pasjonat
- Posty: 407
- Rejestracja: 06 kwie 2010, 20:31
masz tu funkcje która zwroci CI wartość danego szczytu/dołka
zeby uzyskać wartosć dajesz ten np jest dla ostatniego juz uformowanego, Zig[0] bedzie aktualnie formowanym.
Kod: Zaznacz cały
double Zig[5];
int h=0;
for(int g=0; g < 1000; g++) {
Zig[h] = iCustom(Symbol(),Period(),"ZigZag",12,5,3, 0, g);
if(Zig[h] != 0) {
h++; }
if(h > 4) {
break;
}}
Kod: Zaznacz cały
Zig[1]
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.
- siersciuch
- Pasjonat
- Posty: 407
- Rejestracja: 06 kwie 2010, 20:31
Dlaczego wartość np ht[1] nie ma wartosci Ziga który przypisuje w petli??
wartosci zig niechca sie wpisywać w tablice w petlach wiecie dlaczego??
wartosci zig niechca sie wpisywać w tablice w petlach wiecie dlaczego??
Kod: Zaznacz cały
double zig[5];
int h=0;
for(int g=0; g < 1000; g++) {
zig[h] = iCustom(Symbol(),Period(),"ZigZag",10,5,3, 0, g);
if(zig[h] != 0) {
h++; }
if(h > 4) {
break;
}}
if(zig[1]>zig[2])
{
for(int i=1;i<6;i=i+2)
{
ht[i]=zig[i];
}
}
if(zig[1]<zig[2])
{
for(i=1;i<6;i=i+2)
{
lt[i]=zig[i];
}
}
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.
Witam próbuje przetestować nowy indykator który pojawil sie na [url]ttp://codebase.mql4.com/8124[/url]
próbuje wywołać indykator przez iCustom
double tbuy =iCustom(NULL, 0,"FractalZigZagNoRepaint",true,12,5,0,1);
double tsell =iCustom(NULL, 0,"FractalZigZagNoRepaint",true,12,5,1,1);
robie
Print("buy is ",tbay);
Print("sell is",tsell);
i widze 2012.03.19 12:08:11 sell is 2147483647
2012.03.19 12:08:11 bay is 2147483647
buy i sell wartosci kosmos i co gorsza tbuy i tsell te same wartosci ?
a wydaje mi sie ze dobrze wywołuje ten idykator ?
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| FractalZigZagNoRepaint.mq4
//| Shows ZigZag signals without repainting, ever.
//+------------------------------------------------------------------+
#property copyright "Copyright © Arturo Lopez Perez"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#define IName "Fractal ZigZag No-Repaint"
#define ZZBack 1
//-------------------------------
// Input parameters
//-------------------------------
extern bool CalculateOnBarClose = true;
extern int ZZDepth = 12;
extern int ZZDev = 5;
//-------------------------------
// Buffers
//-------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//-------------------------------
// Internal variables
//-------------------------------
// Fractals value -mine-
double fr_resistance = 0;
double fr_support = EMPTY_VALUE;
bool fr_resistance_change = EMPTY_VALUE;
bool fr_support_change = EMPTY_VALUE;
// zzvalues
double zzhigh = 0;
double zzlow = 0;
// Offset in chart
int nShift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
// Arrows
SetIndexStyle(0, DRAW_ARROW, STYLE_DOT, 1);
SetIndexArrow(0, 233);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1, DRAW_ARROW, STYLE_DOT, 1);
SetIndexArrow(1, 234);
SetIndexBuffer(1, ExtMapBuffer2);
// Data window
IndicatorShortName("Fractal Zig Zag No Repaint");
SetIndexLabel(0, "Fractal Up");
SetIndexLabel(1, "Fractal Down");
// Chart offset calculation
switch(Period())
{
case 1: nShift = 1; break;
case 5: nShift = 3; break;
case 15: nShift = 5; break;
case 30: nShift = 10; break;
case 60: nShift = 15; break;
case 240: nShift = 20; break;
case 1440: nShift = 80; break;
case 10080: nShift = 100; break;
case 43200: nShift = 200; break;
}
nShift = nShift * 2;
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
// Start, limit, etc..
int start = 0;
int limit;
int counted_bars = IndicatorCounted();
// nothing else to do?
if(counted_bars < 0)
return(-1);
// do not check repeated bars
limit = Bars - 1 - counted_bars;
// Check if ignore bar 0
if(CalculateOnBarClose == true) start = 1;
// Check the signal foreach bar from past to present
for(int i = limit; i >= start; i--)
{
// Zig Zag high
double zzhighn = iCustom(Symbol(), 0, "ZigZag", ZZDepth, ZZDev, ZZBack, 1, i);
if(zzhighn != 0) zzhigh = zzhighn;
// Zig Zag low
double zzlown = iCustom(Symbol(), 0, "ZigZag", ZZDepth, ZZDev, ZZBack, 2, i);
if(zzlown != 0) zzlow = zzlown;
// Last fractals
double resistance = upper_fractal(i);
double support = lower_fractal(i);
//--------------------------------------------------------
// Show signals
//--------------------------------------------------------
// Show signal if it is a fractal and matches last zigzag high value
if(fr_support_change == true && fr_support == zzlow)
{
// Show arrow on fractal and pricetag
ExtMapBuffer1[i+2] = fr_support - nShift*Point;
} else
// Show signal if it is a fractal and matches last zigzag low value
if(fr_resistance_change == true && fr_resistance == zzhigh)
{
// Show arrow on fractal and pricetag
ExtMapBuffer2[i+2] = fr_resistance + nShift*Point;
}
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom code ahead
//+------------------------------------------------------------------+
/**
* Returns fractal resistance
* @param int shift
*/
double upper_fractal(int shift = 1)
{
double middle = iHigh(Symbol(), 0, shift + 2);
double v1 = iHigh(Symbol(), 0, shift);
double v2 = iHigh(Symbol(), 0, shift+1);
double v3 = iHigh(Symbol(), 0, shift + 3);
double v4 = iHigh(Symbol(), 0, shift + 4);
if(middle > v1 && middle > v2 && middle > v3 && middle > v4/* && v2 > v1 && v3 > v4*/)
{
fr_resistance = middle;
fr_resistance_change = true;
} else {
fr_resistance_change = false;
}
return(fr_resistance);
}
/**
* Returns fractal support and stores wether it has changed or not
* @param int shift
*/
double lower_fractal(int shift = 1)
{
double middle = iLow(Symbol(), 0, shift + 2);
double v1 = iLow(Symbol(), 0, shift);
double v2 = iLow(Symbol(), 0, shift+1);
double v3 = iLow(Symbol(), 0, shift + 3);
double v4 = iLow(Symbol(), 0, shift + 4);
if(middle < v1 && middle < v2 && middle < v3 && middle < v4/* && v2 < v1 && v3 < v4*/)
{
fr_support = middle;
fr_support_change = true;
} else {
fr_support_change = false;
}
return(fr_support);
}
//+------------------------------------------------------------------+
double tbuy =iCustom(NULL, 0,"FractalZigZagNoRepaint",true,12,5,0,1);
double tsell =iCustom(NULL, 0,"FractalZigZagNoRepaint",true,12,5,1,1);
robie
Print("buy is ",tbay);
Print("sell is",tsell);
i widze 2012.03.19 12:08:11 sell is 2147483647
2012.03.19 12:08:11 bay is 2147483647
buy i sell wartosci kosmos i co gorsza tbuy i tsell te same wartosci ?
a wydaje mi sie ze dobrze wywołuje ten idykator ?
Tak, jak źle się wywoła iCustom to wywala "deinitialized" initialized w kółko
a tu nic
nie jestem biegły w indykatorach ale zeby rysowało strzałke to bufor przyjmuje wartość 1 (rysyje) 0 nic
a tu nic
nie jestem biegły w indykatorach ale zeby rysowało strzałke to bufor przyjmuje wartość 1 (rysyje) 0 nic
Ostatnio zmieniony 19 mar 2012, 12:54 przez none, łącznie zmieniany 1 raz.