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