Średnia Długość Cienia

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
emulin
Gaduła
Gaduła
Posty: 103
Rejestracja: 08 lip 2009, 20:29

Nieprzeczytany post autor: emulin »

okey, zajarzyłem, choć w sumie to dalej średnio wiem czemu ma tak być :P

...

Kod: Zaznacz cały

 DolneCienie = 0;
 GorneCienie = 0;
    
    if( Bars - counted_bars > 1 ) 
    {
      if(BackTest ==true)
      {

...


tyle, że do BackTestów się to nie nada..., ale wiem co robić poki co :)

Dodano po 11 minutach:

Aktualny wygląd funkcji start() :

Kod: Zaznacz cały

int start()
{
    int    counted_bars=IndicatorCounted();
//----
    DolneCienie = 0;
    GorneCienie = 0;
    
    if( (Bars - counted_bars > 1) && (BackTest == false) ) 
    {
      for(int i=1; i <= Okres; i++)
      {
         if( BearOrBull(i) == true )    //---- świeca spadkowa
         {
           DolneCienie += ( Close[i] - Low[i] ) / Point;
           GorneCienie += ( High[i] - Open[i] ) / Point;
         }
         else                           //---- Swieca wzrostowa lub Doji
         {
           DolneCienie += ( Open[i] - Low[i] ) / Point;
           GorneCienie += ( High[i] - Close[i] ) / Point;
         }
      }
      
      DolneCienie = DolneCienie / Okres;
      GorneCienie = GorneCienie / Okres;
      SredniaCieni = (DolneCienie + GorneCienie) / 2;
      ObjectSetText("tekst",   DoubleToStr(SredniaCieni,0) , 15, "Arial", Kolor_Tekstu );
    }
    else 
      if(BackTest == true)
      {
        ///Instrukcje      
      }
    
   
//----
   return(0);
}


Dodano po 14 godzinach 7 minutach:

Aktualny Kod:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                SredniaCienia.mq4 |
//|                      Copyright ˆ 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ˆ 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
//+------------------------------------------------------------------+
//| MADE BY TOMASZ MULARCZYK     emulin@interia.pl                   |
//+------------------------------------------------------------------+


extern bool bBackTest = false;
extern int iOkres = 100;
extern int iMiejsce_X = 5;
extern int iMiejsce_Y = 5;
extern int iRozmiarTekstu = 10;
extern color cKolor_Tekstu = Black;
extern color cDolny_Cien = Red;
extern color cGorny_Cien = Green;
string sCzcionka = "Nyala";
string sStrzalkaDolny;
string sStrzalkaGorny;
double dDolneCienie;
double dGorneCienie;
double dSredniaCieni;

int iDigits;

//+------------------------------------------------------------------+
//| INIT                                                             |
//+------------------------------------------------------------------+
int init()
  {
   iDigits = MarketInfo("EURUSD", MODE_DIGITS); //Sprawdzamy czy Cena na danym koncie nie ma jednej cyfry więcej po przecinku
                                                //jak np. w Alpari, gdzie pips ma 10 punktów na wykresie
                                                
   DragAndDrop(); //Sprawdzamy czy wskaźnik został przeciągnięty na okno wykresu
   
   IndicatorBuffers(4);
   sStrzalkaDolny = CharToStr(278);
   sStrzalkaGorny = CharToStr(277); 
   
   ObjectCreate("SrGornychCieni", OBJ_LABEL,0,0,0);
   ObjectSet("SrGornychCieni", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu *2.5) ); 
   ObjectSet("SrGornychCieni", OBJPROP_YDISTANCE, iMiejsce_Y ); 
   ObjectSet("SrGornychCieni",OBJPROP_CORNER,0);
   
   ObjectCreate("SrDolnychCieni", OBJ_LABEL,0,0,0);
   ObjectSet("SrDolnychCieni", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu *2.5) ); 
   ObjectSet("SrDolnychCieni", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu *1.5) ); 
   ObjectSet("SrDolnychCieni",OBJPROP_CORNER,0);
   
   ObjectCreate("StrzalkaWGore", OBJ_LABEL,0,0,0);
   ObjectSet("StrzalkaWGore", OBJPROP_XDISTANCE, iMiejsce_X ); 
   ObjectSet("StrzalkaWGore", OBJPROP_YDISTANCE, iMiejsce_Y ); 
   ObjectSet("StrzalkaWGore",OBJPROP_CORNER,0); 
   
   ObjectCreate("StrzalkaWDol", OBJ_LABEL,0,0,0);
   ObjectSet("StrzalkaWDol", OBJPROP_XDISTANCE, iMiejsce_X ); 
   ObjectSet("StrzalkaWDol", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu * 0.5) ); 
   ObjectSet("StrzalkaWDol",OBJPROP_CORNER,0); 
   
   ObjectCreate("Srednia", OBJ_LABEL,0,0,0); 
   ObjectSet("Srednia", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu * 0.2)); 
   ObjectSet("Srednia", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu *3) ); 
   ObjectSet("Srednia",OBJPROP_CORNER,0); 
  
   return(0);
  }
//+------------------------------------------------------------------+
//| DEINIT                                                           |
//+------------------------------------------------------------------+
int deinit()
  {

    ObjectDelete("Srednia");
    ObjectDelete("SrDolnychCieni");
    ObjectDelete("SrGornychCieni");
    ObjectDelete("StrzalkaWDol");
    ObjectDelete("StrzalkaWGore");

   return(0);
  }
//+------------------------------------------------------------------+
//| START                                                            |
//+------------------------------------------------------------------+
int start()
{
    int    counted_bars=IndicatorCounted();
    
    dDolneCienie = 0;
    dGorneCienie = 0;
    
    
    if( (Bars - counted_bars > 1) && (bBackTest == false) ) //---- normalna funkcja wskaźnika
    {
    
      //------- Obliczenia --------
      for(int i=1; i <= iOkres; i++)
      {
         if( BearOrBull(i) == true )    //---- świeca spadkowa
         {
           dDolneCienie += ( Close[i] - Low[i] ) / Point;
           dGorneCienie += ( High[i] - Open[i] ) / Point;
         }
         else                           //---- świeca wzrostowa lub Doji
         {
           dDolneCienie += ( Open[i] - Low[i] ) / Point;
           dGorneCienie += ( High[i] - Close[i] ) / Point;
         }
      }
      
      dDolneCienie = dDolneCienie / iOkres;
      dGorneCienie = dGorneCienie / iOkres;
      dSredniaCieni = (dDolneCienie + dGorneCienie) / 2;
      
      if( iDigits == 5 ) //czy cena ma jedno miejsce wiecej po przecinku
      {
        dDolneCienie = dDolneCienie / 10;
        dGorneCienie = dGorneCienie / 10;
        dSredniaCieni = dSredniaCieni / 10;
      }
      
      
      //------- wyświetlanie wyników --------
      Wyswietl();
      
    }
    else 
      if(bBackTest == true) // ----- obliczenia na danych historycznych
      {
      
        //------- Obliczenia --------
        for(int j=0; i < iOkres; j++)
        {
          if( BearOrBull(j) == true )    //---- świeca spadkowa
          {
            dDolneCienie += ( Close[OstatniaSwieca() + j] - Low[OstatniaSwieca() + j] ) / Point;
            dGorneCienie += ( High[OstatniaSwieca() + j] - Open[OstatniaSwieca() + j] ) / Point;
          }
          else                           //---- świeca wzrostowa lub Doji
          {
            dDolneCienie += ( Open[OstatniaSwieca() + j] - Low[OstatniaSwieca() + j] ) / Point;
            dGorneCienie += ( High[OstatniaSwieca() + j] - Close[OstatniaSwieca() + j] ) / Point;
          } 
        }
        
        dDolneCienie = dDolneCienie / iOkres;
        dGorneCienie = dGorneCienie / iOkres;
        dSredniaCieni = (dDolneCienie + dGorneCienie) / 2;
      
        if( iDigits == 5 ) //czy cena ma jedno miejsce wiecej po przecinku
        {
          dDolneCienie = dDolneCienie / 10;
          dGorneCienie = dGorneCienie / 10;
          dSredniaCieni = dSredniaCieni / 10;
        }
        
        
        //------- wyświetlanie wyników --------
        Wyswietl();
        
        
      }  
   
   return(0);
}
//+------------------------------------------------------------------+


//Ustawia wskaźnik na miejsce gdzie został przeciągnięty kursorem(o ile był przeciągnięty)
void DragAndDrop()
{
  if( WindowYOnDropped() > 0 )
  {
    iMiejsce_X = WindowXOnDropped();
    iMiejsce_Y = WindowYOnDropped();
  }
  return(0);
}

//Zwraca TRUE jesli świeca w dół i FALSE gdy świeca w góre lub Doji
bool BearOrBull(int Indeks_Swiecy)
{
  bool wynik;
  
  if( Close[Indeks_Swiecy] >= Open[Indeks_Swiecy])
     wynik = false;
  else 
     wynik = true;
  
  return(wynik);
}

//Zwraca indeks ostatniej widocznej swiecy na wykresie
int OstatniaSwieca()
{
  return( WindowFirstVisibleBar() - WindowBarsPerChart() );
}

//Prezentacja wyników
void Wyswietl()
{
   ObjectSetText("StrzalkaWGore",  sStrzalkaGorny , iRozmiarTekstu + (iRozmiarTekstu * 0.8), sCzcionka, cGorny_Cien );
   ObjectSetText("SrGornychCieni",  "śr = " + DoubleToStr(dGorneCienie,2) + " pips" , iRozmiarTekstu, sCzcionka, cKolor_Tekstu );
      
   ObjectSetText("StrzalkaWDol",  sStrzalkaDolny , iRozmiarTekstu + (iRozmiarTekstu * 0.8), sCzcionka, cDolny_Cien );
   ObjectSetText("SrDolnychCieni",  "śr = " + DoubleToStr(dDolneCienie,2) + " pips" , iRozmiarTekstu, sCzcionka, cKolor_Tekstu );
      
   ObjectSetText("Srednia",  "Śr Dł  =  " + DoubleToStr(dSredniaCieni,2) + " pips" , iRozmiarTekstu + (iRozmiarTekstu * 0.1), "Franklin Gothic Medium", cKolor_Tekstu ); 
   
   return(0);
}

Wszystko działa już cacy tak jakbym chciał, oprócz działania na historycznych danych(bBackTest), tzn, żeby po przesuwaniu wykresu do tyłu dane się aktualizowały do ostatniej widocznej na wykresie świeczki.

nie wiem, obliczenia są złe, czy za dużo wymagam od kompa :?
MT4 się zwiesza i tyle, koniec imprezy :? :(

P.S ten DragOnDrop tez nie dziala :?

Anyone can help?
"nie ważne jak dużo mleka może wypić twój sąsiad lub czy jego dzieci podkradają ser żółty z kanapek swoich rówieśników, tak naprawdę ważne jest to czy potrafiłbyś przepłynąć jezioro mając schowanego w kieszeni banana i 3 litry bezołowiowej benzyny"

Awatar użytkownika
Asia
Gaduła
Gaduła
Posty: 319
Rejestracja: 09 gru 2009, 02:00

Nieprzeczytany post autor: Asia »

u mnie działa
wszystko
Czytaj p o w o l i
Dzień dobry, nazywam się ... jestem anonimowym hazardzistą/ką, gram na Forexie
Obrazek

beginner

Nieprzeczytany post autor: beginner »

emulin pisze:oprócz działania na historycznych danych(bBackTest),
Pomijając funkcjonalność kodu (nie znam MQ4) to wygląda na nieskończoną pętlę:
for(int j=0; i < iOkres; j++)

wstaw może j zamiast i.

Awatar użytkownika
emulin
Gaduła
Gaduła
Posty: 103
Rejestracja: 08 lip 2009, 20:29

Nieprzeczytany post autor: emulin »

beginner pisze:
emulin pisze:oprócz działania na historycznych danych(bBackTest),
Pomijając funkcjonalność kodu (nie znam MQ4) to wygląda na nieskończoną pętlę:
for(int j=0; i < iOkres; j++)

wstaw może j zamiast i.
ty... faktycznie, nie zauważyłem tego ;) głupia literówka

niestety coś jest jeszcze nie tak :/

Dodano po 3 godzinach 31 minutach:

Aktualny Kod:

Kod: Zaznacz cały

//+------------------------------------------------------------------+ 
//|                                                SredniaCienia.mq4 | 
//|                      Copyright ˆ 2010, MetaQuotes Software Corp. | 
//|                                        http://www.metaquotes.net | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright ˆ 2010, MetaQuotes Software Corp." 
#property link      "http://www.metaquotes.net" 

#property indicator_chart_window 
//+------------------------------------------------------------------+ 
//| MADE BY TOMASZ MULARCZYK     emulin@interia.pl                   | 
//+------------------------------------------------------------------+ 


extern bool bBackTest = false; 
extern int iOkres = 100; 
extern int iMiejsce_X = 5; 
extern int iMiejsce_Y = 10; 
extern int iRozmiarTekstu = 10; 
extern color cKolor_Tekstu = Black; 
extern color cDolny_Cien = Red; 
extern color cGorny_Cien = Green; 
string sCzcionka = "Nyala"; 
string sStrzalkaDolny; 
string sStrzalkaGorny; 
double dDolneCienie; 
double dGorneCienie; 
double dSredniaCieni; 

int iDigits; 

//+------------------------------------------------------------------+ 
//| INIT                                                             | 
//+------------------------------------------------------------------+ 
int init() 
  { 
   iDigits = MarketInfo("EURUSD", MODE_DIGITS); //Sprawdzamy czy Cena na danym koncie nie ma jednej cyfry więcej po przecinku 
                                                //jak np. w Alpari, gdzie pips ma 10 punktów na wykresie 
                                                
   DragAndDrop(); //Sprawdzamy czy wskaźnik został przeciągnięty na okno wykresu 
    
   IndicatorBuffers(4); 
   sStrzalkaDolny = CharToStr(278); 
   sStrzalkaGorny = CharToStr(277); 
    
   ObjectCreate("SrGornychCieni", OBJ_LABEL,0,0,0); 
   ObjectSet("SrGornychCieni", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu *2.5) ); 
   ObjectSet("SrGornychCieni", OBJPROP_YDISTANCE, iMiejsce_Y ); 
   ObjectSet("SrGornychCieni",OBJPROP_CORNER,0); 
    
   ObjectCreate("SrDolnychCieni", OBJ_LABEL,0,0,0); 
   ObjectSet("SrDolnychCieni", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu *2.5) ); 
   ObjectSet("SrDolnychCieni", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu *1.5) ); 
   ObjectSet("SrDolnychCieni",OBJPROP_CORNER,0); 
    
   ObjectCreate("StrzalkaWGore", OBJ_LABEL,0,0,0); 
   ObjectSet("StrzalkaWGore", OBJPROP_XDISTANCE, iMiejsce_X ); 
   ObjectSet("StrzalkaWGore", OBJPROP_YDISTANCE, iMiejsce_Y ); 
   ObjectSet("StrzalkaWGore",OBJPROP_CORNER,0); 
    
   ObjectCreate("StrzalkaWDol", OBJ_LABEL,0,0,0); 
   ObjectSet("StrzalkaWDol", OBJPROP_XDISTANCE, iMiejsce_X ); 
   ObjectSet("StrzalkaWDol", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu * 0.5) ); 
   ObjectSet("StrzalkaWDol",OBJPROP_CORNER,0); 
    
   ObjectCreate("Srednia", OBJ_LABEL,0,0,0); 
   ObjectSet("Srednia", OBJPROP_XDISTANCE, iMiejsce_X + (iRozmiarTekstu * 0.2)); 
   ObjectSet("Srednia", OBJPROP_YDISTANCE, iMiejsce_Y + (iRozmiarTekstu *3) ); 
   ObjectSet("Srednia",OBJPROP_CORNER,0); 
  
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| DEINIT                                                           | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 

    ObjectDelete("Srednia"); 
    ObjectDelete("SrDolnychCieni"); 
    ObjectDelete("SrGornychCieni"); 
    ObjectDelete("StrzalkaWDol"); 
    ObjectDelete("StrzalkaWGore"); 

   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| START                                                            | 
//+------------------------------------------------------------------+ 
int start() 
{ 
    int    counted_bars=IndicatorCounted(); 
    
    dDolneCienie = 0; 
    dGorneCienie = 0; 
    
    
    if( (Bars - counted_bars > 1) && (bBackTest == false) ) //---- normalna funkcja wskaźnika 
    { 
    
      //------- Obliczenia -------- 
      for(int i=1; i <= iOkres; i++) 
      { 
         if( BearOrBull(i) == true )    //---- świeca spadkowa 
         { 
           dDolneCienie += ( Close[i] - Low[i] ) / Point; 
           dGorneCienie += ( High[i] - Open[i] ) / Point; 
         } 
         else                           //---- świeca wzrostowa lub Doji 
         { 
           dDolneCienie += ( Open[i] - Low[i] ) / Point; 
           dGorneCienie += ( High[i] - Close[i] ) / Point; 
         } 
      } 
      
      dDolneCienie = dDolneCienie / iOkres; 
      dGorneCienie = dGorneCienie / iOkres; 
      dSredniaCieni = (dDolneCienie + dGorneCienie) / 2; 
      
      if( iDigits == 5 ) //czy cena ma jedno miejsce wiecej po przecinku 
      { 
        dDolneCienie = dDolneCienie / 10; 
        dGorneCienie = dGorneCienie / 10; 
        dSredniaCieni = dSredniaCieni / 10; 
      } 
      
      
      //------- wyświetlanie wyników -------- 
      Wyswietl(); 
      
    } 
    else 
      if(bBackTest == true) // ----- obliczenia na danych historycznych 
      { 
      
        //------- Obliczenia -------- 
        for(int j=0; j < iOkres; j++) 
        { 
          if( BearOrBull(j) == true )    //---- świeca spadkowa 
          { 
            dDolneCienie += ( Close[OstatniaSwieca() + j] - Low[OstatniaSwieca() + j] ) / Point; 
            dGorneCienie += ( High[OstatniaSwieca() + j] - Open[OstatniaSwieca() + j] ) / Point; 
          } 
          else                           //---- świeca wzrostowa lub Doji 
          { 
            dDolneCienie += ( Open[OstatniaSwieca() + j] - Low[OstatniaSwieca() + j] ) / Point; 
            dGorneCienie += ( High[OstatniaSwieca() + j] - Close[OstatniaSwieca() + j] ) / Point; 
          } 
        } 
        
        dDolneCienie = dDolneCienie / iOkres; 
        dGorneCienie = dGorneCienie / iOkres; 
        dSredniaCieni = (dDolneCienie + dGorneCienie) / 2; 
      
        if( iDigits == 5 ) //czy cena ma jedno miejsce wiecej po przecinku 
        { 
          dDolneCienie = dDolneCienie / 10; 
          dGorneCienie = dGorneCienie / 10; 
          dSredniaCieni = dSredniaCieni / 10; 
        } 
        
        
        //------- wyświetlanie wyników -------- 
        Wyswietl(); 
        
        
      }  
    
   return(0); 
} 
//+------------------------------------------------------------------+ 


//Ustawia wskaźnik na miejsce gdzie został przeciągnięty kursorem(o ile był przeciągnięty) 
void DragAndDrop() 
{ 
  if( WindowYOnDropped() > 0 ) 
  { 
    iMiejsce_X = WindowXOnDropped(); 
    iMiejsce_Y = WindowYOnDropped(); 
  } 
  return(0); 
} 

//Zwraca TRUE jesli świeca w dół i FALSE gdy świeca w góre lub Doji 
bool BearOrBull(int Indeks_Swiecy) 
{ 
  bool wynik; 
  
  if( Close[Indeks_Swiecy] >= Open[Indeks_Swiecy]) 
     wynik = false; 
  else 
     wynik = true; 
  
  return(wynik); 
} 

//Zwraca indeks ostatniej widocznej swiecy na wykresie 
int OstatniaSwieca() 
{ 
  return( WindowFirstVisibleBar() - WindowBarsPerChart() ); 
} 

//Prezentacja wyników 
void Wyswietl() 
{ 
   ObjectSetText("StrzalkaWGore",  sStrzalkaGorny , iRozmiarTekstu + (iRozmiarTekstu * 0.8), sCzcionka, cGorny_Cien ); 
   ObjectSetText("SrGornychCieni",  "śr = " + DoubleToStr(dGorneCienie,2) + " pips" , iRozmiarTekstu, sCzcionka, cKolor_Tekstu ); 
      
   ObjectSetText("StrzalkaWDol",  sStrzalkaDolny , iRozmiarTekstu + (iRozmiarTekstu * 0.8), sCzcionka, cDolny_Cien ); 
   ObjectSetText("SrDolnychCieni",  "śr = " + DoubleToStr(dDolneCienie,2) + " pips" , iRozmiarTekstu, sCzcionka, cKolor_Tekstu ); 
      
   ObjectSetText("Srednia",  "Śr Dł  =  " + DoubleToStr(dSredniaCieni,2) + " pips" , iRozmiarTekstu + (iRozmiarTekstu * 0.1), "Franklin Gothic Medium", cKolor_Tekstu ); 
    
   return(0); 
} 
Dołączam też wskaźnik. Nie działa funkcja DragAndDrop, Nie działa Back Test, oraz po ustawieniu wskaźnika tylko na dany wykres(np. tylko H4), na każdym innym będą zostawiać labele.

A tak po za tym to jest OK :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"nie ważne jak dużo mleka może wypić twój sąsiad lub czy jego dzieci podkradają ser żółty z kanapek swoich rówieśników, tak naprawdę ważne jest to czy potrafiłbyś przepłynąć jezioro mając schowanego w kieszeni banana i 3 litry bezołowiowej benzyny"

beginner

Nieprzeczytany post autor: beginner »

emulin pisze: Nie działa funkcja DragAndDrop, Nie działa Back Test, oraz po ustawieniu wskaźnika tylko na dany wykres(np. tylko H4), na każdym innym będą zostawiać labele.
:arrow: debugger ...

Awatar użytkownika
emulin
Gaduła
Gaduła
Posty: 103
Rejestracja: 08 lip 2009, 20:29

Nieprzeczytany post autor: emulin »

jak ustawienia wizualizacji? tzn na jakich wykresach użytkownik sobie życzy mieć wskaźnik...?
"nie ważne jak dużo mleka może wypić twój sąsiad lub czy jego dzieci podkradają ser żółty z kanapek swoich rówieśników, tak naprawdę ważne jest to czy potrafiłbyś przepłynąć jezioro mając schowanego w kieszeni banana i 3 litry bezołowiowej benzyny"

ODPOWIEDZ