Panowie!
Wiecie, że jestem noga z programowania więc po raz kolejny proszę o pomoc. Jeśli to będzie za dużo roboty za free, to proszę nie odpisywać. Z góry dziękuję za pomoc!
ZAŁOŻENIE GŁÓWNE
Jeśli nie da się wymusić kolejności spełniania poszczególnych warunków, to poniższy algorytm jest nieważny. Chodzi o to, że program czeka na spełnienie punktu 1, potem 2 i na koniec 3 i dopiero jeśli spełnione są wszystkie 3 ale w takiej kolejności jak napisałem, to następuje zajęcie pozycji. Istnieje możliwość spełnienia się w pierwszej kolejności punktu 3 przed 2 i wtedy algorytm nie ma sensu i praca będzie bezsensowna jeśli takiego wymuszenia kolejności spełniania warunków nie da się zrobić ...
ALGORYTM
1. Jeśli szybka Stoch'a o ustawieniach (8,5,3) jest powyżej 20
+
2. Jeśli aktualna cena jest większa o 20 pipsów od LOW poprzedniej świeczki
+
3. Jeśli aktualna cena jest większa o 20 pipsów od LOW aktualnej świeczki
to BUY
1. Jeśli szybka Stoch'a o ustawieniach (8,5,3) jest poniżej 80
+
2. Jeśli aktualna cena jest mniejsza o 20 pipsów od HIGH poprzedniej świeczki
+
3. Jeśli aktualna cena jest mniejsza o 20 pipsów od HIGH aktualnej świeczki
to SELL
3. Zlecenie tylko jedno na aktualną świeczkę
4. Zamknięcie zlecenia na zamknięciu aktualnej świeczki
P.S. Proszę się tym nie sugerować w spekulacji ponieważ jest to mały fragment opracowywanego przeze mnie EA, składanego partiami ...
Część EA - prośba o kilka prostych linijek kodu ...
jak Ty to chcesz zlozyc jak takiej prostej rzeczy nie umiesz zrobic<kerimb> pisze:P.S. Proszę się tym nie sugerować w spekulacji ponieważ jest to mały fragment opracowywanego przeze mnie EA, składanego partiami ...

skoro te punkty sa kolejno a nie wszystko naraz spelnione to jescze brakuje w Twoim opisie uwzglednienia czasu miedzy punktami
Nie ma znaczenia czas ... Soft sprawdza 1 ... Jeśli jest spełniony, to sprawdza 2 ... Jeśli jest spełniony to sprawdza 3 ... Dopiero jak są spełnione 1, 2 i 3 (ale tylko w takiej kolejności) zostaje odpalony sygnał na zajęcie pozycji ... Jasne, że w tym czasie kiedy będzie po spełnieniu 1 i 2 czekał na spełnienie 3, to 1 lub 2 może już nie być aktualne ... Wtedy jazda od początku ponieważ nie było sygnału na zajęcie pozycji ... itd ... itd ...
Dodano po 2 minutach:

Dodano po 2 minutach:
Ja tego składać nie muszę ... Ktoś zrobi to za mnie ...xpep pisze:jak Ty to chcesz zlozyc jak takiej prostej rzeczy nie umiesz zrobic

- w_ujek edek
- Stały bywalec
- Posty: 39
- Rejestracja: 28 kwie 2009, 10:57
Kod: Zaznacz cały
if (pkt1) {
if (pkt2) {
if (pkt3) {
............................
}}}
<kerimb> pisze:1. Jeśli szybka Stoch'a o ustawieniach (8,5,3) jest powyżej 20
+
2. Jeśli aktualna cena jest większa o 20 pipsów od LOW poprzedniej świeczki
+
3. Jeśli aktualna cena jest większa o 20 pipsów od LOW aktualnej świeczki
to BUY
Kod: Zaznacz cały
if(iStochastic(NULL,0,8,5,3,MODE_SMA,0,MODE_SIGNAL,0)>20) // pierwszy warunek
if( Close[0]>(Low[1]+20*Point) ) // drugi
if( Close[0]>(Low[0]+20*Point) ) // trzeci
{ //tutaj wejscie i co tam jeszcze trzeba
}
to chyba najpopularniejszy problem w dziale programowanie<kerimb> pisze:3. Zlecenie tylko jedno na aktualną świeczkę
a to jest to wlasciwie to samo<kerimb> pisze:4. Zamknięcie zlecenia na zamknięciu aktualnej świeczki
xpep
To co przedstawiasz jest błędne - chyba że wszystkie warunki mają być wykonane w obrębie 1 świecy i nadal spełnione w obrębie tej świecy - właściwie zapis określa że wszystkie warunki muszą być na raz spełnione.
Wszystko co chciałby Kerimb da się zrobić - kwestia czasu i pełniejszej koncepcji.
To co przedstawiasz jest błędne - chyba że wszystkie warunki mają być wykonane w obrębie 1 świecy i nadal spełnione w obrębie tej świecy - właściwie zapis określa że wszystkie warunki muszą być na raz spełnione.
Wszystko co chciałby Kerimb da się zrobić - kwestia czasu i pełniejszej koncepcji.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Dziękuję wszystkim za pomoc jaką otrzymałem do tej pory!
Mam niestety problem z umieszczeniem właściwego warunku na zamknięcie zlecenia na otwarciu kolejnej świeczki. Nie wiem jak to rozwalić.
Wygląda to tak, że szukam spełnienia wszystkich warunków na świecy W1. Jeśli one są spełnione, to następuje zajęcie pozycji. Tutaj powinien EA po zajęciu tej pozycji trzymać ją aż do otwarcia następnej świecy na W1. Nie zależnie od tego co by się działo, to ma czekać na otwarcie kolejnej W1 albo zlecenie zdejmie SL lub ja z łapy.
Nie mogę złapać jak powiązać zamknięcie aktualnej W1 z otwarciem następnej na W1? Wszędzie jest [0] - aktualna i [1] - poprzednia. Nie ma odniesienia do następnej ... itd ... itd ...
W załączeniu, na samym końcu przesyłam fragment EA zrobiony za pomocą http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ .
Dla przykładu jako warunek wejścia dla L i S:
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
Podałem z czapy Stocha, (to nie istotne)
Sygnał wyjścia powinien być w ...
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
dla Lki i
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
dla Ski ...
Czy dało by radę i czy znalazł by ktoś chwilę czasu aby zerknąć jaki warunek wwalić powyżej, tak aby po zajęciu pozycji L czy S zdejmowało tą pozycję w chwili otwarcia następnej świecy na W1? Tak i tylko tak ... Jeśli dało by radę dopisać dodatkowy warunek na to aby na danej świecy W1 było zajmowane tylko jedno zlecenie na tą świeczkę, to będę dozgonnie wdzięczny.
Z góry dzięki!
P.S. Załączam również kod edytowalny ... Można śmiało wejść na stronę http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ i załadować to ustroistwo w celu edycji ... itd .. itd ...
Pozdrawiam,
Mirek
Dodano po 13 minutach:
Na razie z wykorzystaniem zdjęcia zlecenia na TP w 1/3 możliwego ruchu i bez optymalizacji, to wygląda tak jak na rysunku ... Zdjęcie zlecenia na otwarciu kolejnej świeczki powinno pozwolić na wzięcie dodatkowych 1/3 zakresu ruchu a nawet do 80% ... Milion testów do zrobienia i na milionach dostępnych danych ...
Oczywiście, to testy z DEMO (Wariant nr 14), bo nie da rady inaczej na tym etapie ale będzie dobrze ...
Dodano po 4 minutach:
Mam niestety problem z umieszczeniem właściwego warunku na zamknięcie zlecenia na otwarciu kolejnej świeczki. Nie wiem jak to rozwalić.
Wygląda to tak, że szukam spełnienia wszystkich warunków na świecy W1. Jeśli one są spełnione, to następuje zajęcie pozycji. Tutaj powinien EA po zajęciu tej pozycji trzymać ją aż do otwarcia następnej świecy na W1. Nie zależnie od tego co by się działo, to ma czekać na otwarcie kolejnej W1 albo zlecenie zdejmie SL lub ja z łapy.
Nie mogę złapać jak powiązać zamknięcie aktualnej W1 z otwarciem następnej na W1? Wszędzie jest [0] - aktualna i [1] - poprzednia. Nie ma odniesienia do następnej ... itd ... itd ...
W załączeniu, na samym końcu przesyłam fragment EA zrobiony za pomocą http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ .
Dla przykładu jako warunek wejścia dla L i S:
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
Podałem z czapy Stocha, (to nie istotne)
Sygnał wyjścia powinien być w ...
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
dla Lki i
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
dla Ski ...
Czy dało by radę i czy znalazł by ktoś chwilę czasu aby zerknąć jaki warunek wwalić powyżej, tak aby po zajęciu pozycji L czy S zdejmowało tą pozycję w chwili otwarcia następnej świecy na W1? Tak i tylko tak ... Jeśli dało by radę dopisać dodatkowy warunek na to aby na danej świecy W1 było zajmowane tylko jedno zlecenie na tą świeczkę, to będę dozgonnie wdzięczny.
Z góry dzięki!
P.S. Załączam również kod edytowalny ... Można śmiało wejść na stronę http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ i załadować to ustroistwo w celu edycji ... itd .. itd ...
Pozdrawiam,
Mirek
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iStochastic("EURUSD", PERIOD_W1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 0);
double Buy1_2 = iStochastic("EURUSD", PERIOD_W1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 1);
double Sell1_1 = iStochastic("EURUSD", PERIOD_W1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 0);
double Sell1_2 = iStochastic("EURUSD", PERIOD_W1, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+
Dodano po 13 minutach:
Na razie z wykorzystaniem zdjęcia zlecenia na TP w 1/3 możliwego ruchu i bez optymalizacji, to wygląda tak jak na rysunku ... Zdjęcie zlecenia na otwarciu kolejnej świeczki powinno pozwolić na wzięcie dodatkowych 1/3 zakresu ruchu a nawet do 80% ... Milion testów do zrobienia i na milionach dostępnych danych ...
Oczywiście, to testy z DEMO (Wariant nr 14), bo nie da rady inaczej na tym etapie ale będzie dobrze ...

Dodano po 4 minutach:
Dokładnie!Tig3r pisze:wszystkie warunki mają być wykonane w obrębie 1 świecy i nadal spełnione w obrębie tej świecy
Tak ale tylko w zadanej kolejności. Jeśli jako pierwszy byłby spełniony 1 a później 3, to nie ma prawa zająć pozycji ... itd ... itd ...Tig3r pisze:wszystkie warunki muszą być na raz spełnione
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.