Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

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

Nieprzeczytany post autor: personov »

A ten wskaźnik ma nanosic jakieś obiekty na wykresie, czy linie ?
Solą życia jest kasa.

forexsowicz91
Pasjonat
Pasjonat
Posty: 504
Rejestracja: 25 lis 2011, 17:55

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

Nieprzeczytany post autor: forexsowicz91 »

na nanosić 3 linie, bo jest to przerobiony wskaźnik bollinger bands.
standardowo średnia z 50 okresów a wstęgi z 30, deviation = 2.0
koncepcja taka jest, aby rozdzielić okres dla średniej i wstęg.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                    New Bands.mq4 |
//|                                                           Martin |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Martin"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Red
//--- input parameters
extern int       MA_Period=50;
extern int       Bands_Period=30;
extern double    Deviations=2.0;
extern int       BandsShift=0;
//--- buffers
double srednia[];
double upper[];
double lower[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   if(Bars<=Bands_Period) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=Bands_Period;i++)
        {
         srednia[Bars-i]=EMPTY_VALUE;
         upper[Bars-i]=EMPTY_VALUE;
         lower[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      srednia[i]=iMA(NULL,0,MA_Period,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
   i=Bars-Bands_Period+1;
   if(counted_bars>Bands_Period-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+Bands_Period-1;
      oldval=srednia[i];
      while(k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=Deviations*MathSqrt(sum/Bands_Period);
      upper[i]=oldval+deviation;
      lower[i]=oldval-deviation;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Edycja:
już mam. Podczas usuwania deinitialization function, usunąłem przez przypadek część kodu z initialization function

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,srednia);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,upper);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,lower);
//----
   return(0);
  }

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

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

Nieprzeczytany post autor: none »

Witam nie mam jakoś pomysłu jak zakodować Stop Loss i take Profit dla kilku zleceń o różnej cenie zakupu na tym samym poziomie

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

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

Nieprzeczytany post autor: personov »

W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.
Solą życia jest kasa.

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

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

Nieprzeczytany post autor: none »

Kod: Zaznacz cały

W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.


Nie bardzo rozumiem

mi chodziło o stop lossy dla różnych zleceń i cen zakupu/sprzedaży ASk Bid tzw. uśrednianie ceny
natomiast stop loss wspólny i take profit

np. kupno 1.3000
1.4000
1.5000
cena srednia 1.4 i dla niej stop loss np. 35pipsów

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

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

Nieprzeczytany post autor: JAREK67 »

none pisze:

Kod: Zaznacz cały

W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.


Nie bardzo rozumiem

mi chodziło o stop lossy dla różnych zleceń i cen zakupu/sprzedaży ASk Bid tzw. uśrednianie ceny
natomiast stop loss wspólny i take profit

np. kupno 1.3000
1.4000
1.5000
cena srednia 1.4 i dla niej stop loss np. 35pipsów
ale to się przecież kupy nie trzyma. a jak to chcesz zrobić? jezeli nawet cena srednia wejsc jest 1.4 to nie możesz od tej ceny ustawić SL w odległości 35 pipsów dla pozycji otworzonej po 1.500 itd. możesz to ogarnąć poprzez kontrolę relacji Equity/Balance rachunku dla wszystkich pozycji. ale nie wiem czy o to ci chodzi.

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

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

Nieprzeczytany post autor: NiceFox »

tak kombinuję z pętlą for, i nie wychodzi.
Chcę wyciągnąć ticket ostatniego aktywnego zlecenia z największym lotem.
Może ktoś wie jak to napisać.

Kod: Zaznacz cały

  for(z=0; z<OrdersTotal(); z++) {
    OrderSelect(z, SELECT_BY_POS);
    max=MathMax(OrderLots(),max);
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

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

Nieprzeczytany post autor: bfx »

NiceFox u mnie działa, max przyjmuje wartosc najwiekszego lota z otwartych pozycji
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

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

Nieprzeczytany post autor: NiceFox »

A u mnie "double max" leci od najmniejszego lota do największego.
Chodzi mi o to żeby wyłapać ticket z największym lotem.
Pieniądze rosną na drzewie cierpliwości.

Awatar użytkownika
bfx
Pasjonat
Pasjonat
Posty: 1260
Rejestracja: 11 sty 2013, 15:49

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

Nieprzeczytany post autor: bfx »

Spróbuj tak:

Kod: Zaznacz cały

int start()
  {
double max;
int z;
int ticket;
 for(z=0; z<OrdersTotal(); z++) {
    OrderSelect(z, SELECT_BY_POS,MODE_TRADES);
    if (OrderType()==0 || OrderType()==1){
    if (OrderLots()>max) ticket=OrderTicket();
    max=MathMax(OrderLots(),max);
}}
Alert(ticket);
   return(0);
  }
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"

ODPOWIEDZ