Dzięki:-)personov pisze:MathAbs() to wartość bezwzględna.Wiertara pisze:Jak z Candle_Body zrobić wartość zawsze dodatnią bo przy czarnych świecach wyświetla mi ujemną co jest zrozumiałe, więc jak to poprawićKod: Zaznacz cały
double Candle_Body = MathAbs((CLOSE-OPEN)/10);
Wszystkie pytania dozwolone początkujących programistów
Re: Wszystkie pytania dozwolone początkujących programistów
Re: Wszystkie pytania dozwolone początkujących programistów







Chcę aby kod otwierał zlecenie SELL w momencie kiedy cena dotyka kropki (ParabolicSAR) i tylko warto zwrócić uwagę że momencie dotknięcia ta kropka przeskakuje spod ceny – nad cenę (wszystko dzieje się pod średnią kroczącą).
Zlecenie BUY analogicznie.
Na razie mam kod:
// Moving averages & Parabolic
double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
double Parabolic = iSAR(NULL,0,ParabolicStep,ParabolicMax,0);
// Buy order
if(Parabolic > FastMA && BuyTicket == 0)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);
// Close order
if(OrderCloseTime() == 0 && SellTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
double OpenPrice = Ask;
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
// Sell Order
if(Parabolic < FastMA && SellTicket == 0)
{
OrderSelect(BuyTicket,SELECT_BY_TICKET);
if(OrderCloseTime() == 0 && BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
OpenPrice = Bid;
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
return(0);
}
Czy ktoś mógłby podpowiedzieć mi jak to napisać w mql żeby było zgodnie z moimi założeniami?

Don't tell me the sky is the limit when there are footprints on the moon!
Re: Wszystkie pytania dozwolone początkujących programistów
Ja bym wziął pod uwagę fakt, że w tym momencie, który chciałbyś uchwycić SAR przeskakuje z pod ceny nad cenę ( i odwrotnie ).
Taki moment uchwycisz tylko porównując SAR z poprzednim SARem.
Zdefiniuj sobie :
I teraz w warunkach ujmij zapis :
Taki moment uchwycisz tylko porównując SAR z poprzednim SARem.
Zdefiniuj sobie :
Kod: Zaznacz cały
double Parabolic = iSAR(NULL,0,ParabolicStep,ParabolicMax,0);
double Parabolic_a = iSAR(NULL,0,ParabolicStep,ParabolicMax,1);
Kod: Zaznacz cały
// Buy order
if(Parabolic_a>Bid && Parabolic<Bid && Parabolic > FastMA && BuyTicket == 0)
Solą życia jest kasa.
Re: Wszystkie pytania dozwolone początkujących programistów
Dzięki o to mi chodziło!
-- Dodano: ndz 08-09-2013, 11:39 --
dla "personov" !!! Za jego pomoc przy kodzie mql.
Cóż mogę powiedzieć... o jego rzetelności i chęci pomocy powinni ballady śpiewać. Gdybym miał córkę to chciałbym żeby miała takiego adoratora jak on!
Pzdr
-- Dodano: ndz 08-09-2013, 11:39 --

Cóż mogę powiedzieć... o jego rzetelności i chęci pomocy powinni ballady śpiewać. Gdybym miał córkę to chciałbym żeby miała takiego adoratora jak on!
Pzdr
Don't tell me the sky is the limit when there are footprints on the moon!
Re: Wszystkie pytania dozwolone początkujących programistów
Co zmienić w kodzie, aby wskaźnik w testerze strategii wyglądał tak samo jak na wykresie live?
Chodzi mi o MTF_Stochastic.
Chodzi mi o MTF_Stochastic.
Re: Wszystkie pytania dozwolone początkujących programistów
Powinien wyglądać tak samo. Chyba, że masz inne ustawienia tego wskaźnika w testerze strategii i inne na live.daamiian pisze:Co zmienić w kodzie, aby wskaźnik w testerze strategii wyglądał tak samo jak na wykresie live?
Chodzi mi o MTF_Stochastic.
Solą życia jest kasa.
Re: Wszystkie pytania dozwolone początkujących programistów
personov pisze:Powinien wyglądać tak samo. Chyba, że masz inne ustawienia tego wskaźnika w testerze strategii i inne na live.daamiian pisze:Co zmienić w kodzie, aby wskaźnik w testerze strategii wyglądał tak samo jak na wykresie live?
Chodzi mi o MTF_Stochastic.
Ustawienia mam takie same .
Chyba znalazłem rozwiązanie mojego problemu :
http://www.forexfactory.com/showthread.php?t=365258
Re: Wszystkie pytania dozwolone początkujących programistów
Mam następujący problem:
EA otwiera tylko jedną transakcję tzn:
- Mam sygnał do otwarcie pozycji - EA ją otwiera, automatycznie ustawia TP i SL (tak ma być) i pozycja jest otwarta do momentu jej zamkniecia przez SL lub TP i problemem jest to że w trakcie tego okresu czasu kiedy pozycja jest otwarta może pojawić się wiele sygnałów do zajęcia tekiej samej pozycji - a EA tego nie robi(chcę żeby mógł otwierać wiele pozycji ale tylko jedną na jeden sygnał). Jak to zmienić?
// Buy order
if(Parabolic_a>Bid && Parabolic<Bid && Parabolic > FastMA && BuyTicket == 0)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);
// Close order
if(OrderCloseTime() == 0 && SellTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
double OpenPrice = Ask;
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
// Sell Order
if(Parabolic_a<Ask && Parabolic>Ask && Parabolic < FastMA && SellTicket == 0)
{
OrderSelect(BuyTicket,SELECT_BY_TICKET);
if(OrderCloseTime() == 0 && BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
OpenPrice = Bid;
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
return(0);
}
EA otwiera tylko jedną transakcję tzn:
- Mam sygnał do otwarcie pozycji - EA ją otwiera, automatycznie ustawia TP i SL (tak ma być) i pozycja jest otwarta do momentu jej zamkniecia przez SL lub TP i problemem jest to że w trakcie tego okresu czasu kiedy pozycja jest otwarta może pojawić się wiele sygnałów do zajęcia tekiej samej pozycji - a EA tego nie robi(chcę żeby mógł otwierać wiele pozycji ale tylko jedną na jeden sygnał). Jak to zmienić?
// Buy order
if(Parabolic_a>Bid && Parabolic<Bid && Parabolic > FastMA && BuyTicket == 0)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);
// Close order
if(OrderCloseTime() == 0 && SellTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
double OpenPrice = Ask;
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
// Sell Order
if(Parabolic_a<Ask && Parabolic>Ask && Parabolic < FastMA && SellTicket == 0)
{
OrderSelect(BuyTicket,SELECT_BY_TICKET);
if(OrderCloseTime() == 0 && BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
OpenPrice = Bid;
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
return(0);
}
Don't tell me the sky is the limit when there are footprints on the moon!
Re: Wszystkie pytania dozwolone początkujących programistów
Trzeba usunąć zapismicjat pisze:Mam następujący problem:
EA otwiera tylko jedną transakcję tzn:
- Mam sygnał do otwarcie pozycji - EA ją otwiera, automatycznie ustawia TP i SL (tak ma być) i pozycja jest otwarta do momentu jej zamkniecia przez SL lub TP i problemem jest to że w trakcie tego okresu czasu kiedy pozycja jest otwarta może pojawić się wiele sygnałów do zajęcia tekiej samej pozycji - a EA tego nie robi(chcę żeby mógł otwierać wiele pozycji ale tylko jedną na jeden sygnał). Jak to zmienić?
Kod: Zaznacz cały
BuyTicket == 0
Kod: Zaznacz cały
SellTicket == 0
Te zapisy oznaczają, że jednocześnie może być otwarta tylko jedna pozycja Buy i jedna Sell.
Jednak jeśli usuniesz ten zapis to w momencie pojawienia się sygnału EA będzie Ci na jednym sygnale otwierało wiele transakcji ( bo warunki będą spełnione ).
Sposobem na to jest zastosowanie jakiejś blokady.
Najprostszym sposobem będzie zastosowanie zapisu w warunkach
Kod: Zaznacz cały
Volume[0]==1
-- Dodano: wt 10-09-2013, 12:08 --
Bardziej skomplikowanym sposobem, ale na pewno skuteczniejszym jest zastosowanie blokady, która będzie kasowana po kolejnej świecy. Na końcu kodu dochodzi funkcja, która definiuje początek świecy.
na początku kodu definicje :
Kod: Zaznacz cały
int blokBuy=0;
int blokSell=0;
Kod: Zaznacz cały
//kasowanie blokady na następnej świecy
if((blokBuy==1||blokSell==1)&&isNewBar()){blokBuy=0;blokSell=0;}
Kod: Zaznacz cały
// Buy order
if(blokBuy==0&&Parabolic_a>Bid && Parabolic<Bid && Parabolic > FastMA)
{
OrderSelect(SellTicket,SELECT_BY_TICKET);blokBuy=1;
// Close order
if(OrderCloseTime() == 0 && SellTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
double OpenPrice = Ask;
// Calculate stop loss and take profit
if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
// Open buy order
BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
SellTicket = 0;
}
// Sell Order
if(blokSell==0&&Parabolic_a<Ask && Parabolic>Ask && Parabolic < FastMA)
{
OrderSelect(BuyTicket,SELECT_BY_TICKET);blokSell=1;
if(OrderCloseTime() == 0 && BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlippage,Red);
}
OpenPrice = Bid;
if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSlippage,
SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
BuyTicket = 0;
}
return(0);
}
Kod: Zaznacz cały
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];}
return(newBar);}
Solą życia jest kasa.
-
- Pasjonat
- Posty: 504
- Rejestracja: 25 lis 2011, 17:55
Re: Wszystkie pytania dozwolone początkujących programistów
Napisałem wskaźnik "informacyjny", ale coś jest źle w kodzie bo nie wyświetla prawidłowo.
Screen 1 pokazuje jak wyświetla obecnie (czyli źle)
Screen 2 jak powinno być
Poniżej kod wskaźnika. Co jest źle?
Screen 1 pokazuje jak wyświetla obecnie (czyli źle)
Screen 2 jak powinno być
Poniżej kod wskaźnika. Co jest źle?
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| InfoMarket.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_chart_window
extern color kolor = White;
extern int FontSize = 10;
extern string Spreadtekst="Spread =";
extern string Swaplongtekst="Swap long =";
extern string Swapshorttekst="Swap short =";
extern string Tickvaluetekst="Tick value =";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
RefreshRates();
int spreadmarket=MarketInfo(Symbol(),MODE_SPREAD);
ObjectCreate("Spread",OBJ_LABEL,0,0,0);
ObjectSetText("Spread",Spreadtekst,FontSize ,"Arial Black",kolor);
ObjectSet("Spread",OBJPROP_XDISTANCE,5);
ObjectSet("Spread",OBJPROP_YDISTANCE,20);
ObjectCreate("spread",OBJ_LABEL,0,0,0);
ObjectSetText("spread", spreadmarket,"Arial Black",kolor);
ObjectSet("spread",OBJPROP_XDISTANCE,15);
ObjectSet("spread",OBJPROP_YDISTANCE,20);
double swaplongmarket=MarketInfo(Symbol(),MODE_SWAPLONG);
ObjectCreate("Swaplong",OBJ_LABEL,0,0,0);
ObjectSetText("Swaplong",Swaplongtekst,FontSize ,"Arial Black",kolor);
ObjectSet("Swaplong",OBJPROP_XDISTANCE,5);
ObjectSet("Swaplong",OBJPROP_YDISTANCE,30);
ObjectCreate("swaplong",OBJ_LABEL,0,0,0);
ObjectSetText("swaplong", swaplongmarket,"Arial Black",kolor);//swap dla pozycji long
ObjectSet("swaplong",OBJPROP_XDISTANCE,15);
ObjectSet("swaplong",OBJPROP_YDISTANCE,30);
double swapshortmarket=MarketInfo(Symbol(),MODE_SWAPSHORT);
ObjectCreate("Swapshort",OBJ_LABEL,0,0,0);
ObjectSetText("Swapshort",Swapshorttekst,FontSize ,"Arial Black",kolor);
ObjectSet("Swapshort",OBJPROP_XDISTANCE,5);
ObjectSet("Swapshort",OBJPROP_YDISTANCE,40);
ObjectCreate("swapshort",OBJ_LABEL,0,0,0);
ObjectSetText("swapshort", swapshortmarket,"Arial Black",kolor);//swap dla pozycji short
ObjectSet("swapshort",OBJPROP_XDISTANCE,15);
ObjectSet("swapshort",OBJPROP_YDISTANCE,40);
double tickvaluemarket=MarketInfo(Symbol(),MODE_TICKVALUE);
ObjectCreate("Tickvalue",OBJ_LABEL,0,0,0);
ObjectSetText("Tickvalue",Tickvaluetekst,FontSize ,"Arial Black",kolor);
ObjectSet("Tickvalue",OBJPROP_XDISTANCE,5);
ObjectSet("Tickvalue",OBJPROP_YDISTANCE,60);
ObjectCreate("tickvalue",OBJ_LABEL,0,0,0);
ObjectSetText("tickvalue",tickvaluemarket, FontSize,"Arial Black",kolor);//wartość pipsa dla 1 lota
ObjectSet("tickvalue",OBJPROP_XDISTANCE,15);
ObjectSet("tickvalue",OBJPROP_YDISTANCE,60);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Spread");
ObjectDelete("spread");
ObjectDelete("Swaplong");
ObjectDelete("swaplong");
ObjectDelete("Swapshort");
ObjectDelete("swapshort");
ObjectDelete("Tickvalue");
ObjectDelete("tickvalue");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
RefreshRates();
ObjectSetText("spread",DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD),0));
ObjectSetText("swaplong",DoubleToStr(MarketInfo(Symbol(),MODE_SWAPLONG),2));
ObjectSetText("swapshort",DoubleToStr(MarketInfo(Symbol(),MODE_SWAPSHORT),2));
ObjectSetText("tickvalue",DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),2));
return(0);
}
//+------------------------------------------------------------------+
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.