Wszystkie pytania dozwolone początkujących programistów
Re: Wszystkie pytania dozwolone początkujących programistów
A ten wskaźnik ma nanosic jakieś obiekty na wykresie, czy linie ?
Solą życia jest kasa.
-
- Pasjonat
- Posty: 504
- Rejestracja: 25 lis 2011, 17:55
Re: Wszystkie pytania dozwolone początkujących programistów
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.
Edycja:
już mam. Podczas usuwania deinitialization function, usunąłem przez przypadek część kodu z initialization function
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);
}
//+------------------------------------------------------------------+
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);
}
Re: Wszystkie pytania dozwolone początkujących programistów
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
Re: Wszystkie pytania dozwolone początkujących programistów
W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.
Solą życia jest kasa.
Re: Wszystkie pytania dozwolone początkujących programistów
Kod: Zaznacz cały
W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.
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
Re: Wszystkie pytania dozwolone początkujących programistó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.none pisze:Nie bardzo rozumiemKod: Zaznacz cały
W nawiasie OrderSend() w miejscu SL i TP wpisujesz po prostu tą wartość.
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
Re: Wszystkie pytania dozwolone początkujących programistów
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ć.
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.
Re: Wszystkie pytania dozwolone początkujących programistów
NiceFox u mnie działa, max przyjmuje wartosc najwiekszego lota z otwartych pozycji
"Ty też jesteś Bogiem! Tylko uświadom to sobie, sobie"
Re: Wszystkie pytania dozwolone początkujących programistów
A u mnie "double max" leci od najmniejszego lota do największego.
Chodzi mi o to żeby wyłapać ticket z największym lotem.
Chodzi mi o to żeby wyłapać ticket z największym lotem.
Pieniądze rosną na drzewie cierpliwości.
Re: Wszystkie pytania dozwolone początkujących programistów
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"