Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

No fakt, bo w jedenej sekundzie moze być pare ticków wiec..


doładnie chodzi mi oto, zeby mieć cene np otwarcia z świeczki M5 o np godznienie 9 czasu terminala
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Ribelo
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 18 lut 2010, 20:28

Nieprzeczytany post autor: Ribelo »

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.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

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, ) )
a ten TIme jak wpisać jak chce np o 10 rano świece ??

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.

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

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.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

masz tu funkcje która zwroci CI wartość danego szczytu/dołka

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;
   }}
zeby uzyskać wartosć dajesz

Kod: Zaznacz cały

Zig[1]
ten np jest dla ostatniego juz uformowanego, Zig[0] bedzie aktualnie formowanym.
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

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??

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.

Lite
Bywalec
Bywalec
Posty: 15
Rejestracja: 01 maja 2008, 14:17

Nieprzeczytany post autor: Lite »

dzieki wielkie. biore sie za analize tego co napisales i zaimplementowanie do reszty kodu.

none
Stały bywalec
Stały bywalec
Posty: 23
Rejestracja: 09 sty 2012, 12:16

Nieprzeczytany post autor: none »

Witam próbuje przetestować nowy indykator który pojawil sie na [url]ttp://codebase.mql4.com/8124[/url]

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);
}
 
//+------------------------------------------------------------------+
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 ?

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Pamiętaj, że w nawiasie iCustom nazwa wskaźnika musi uwzględniać również spację i podkreślniki.
Solą życia jest kasa.

none
Stały bywalec
Stały bywalec
Posty: 23
Rejestracja: 09 sty 2012, 12:16

Nieprzeczytany post autor: none »

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
Ostatnio zmieniony 19 mar 2012, 12:54 przez none, łącznie zmieniany 1 raz.

ODPOWIEDZ