Witam mam prośbę może ktoś wie jak to poprawić , aby po otwarciu pozycji Buy i cena cofnie się o np 20 pips otworzy automatycznie przeciwstawne zlecenie Sell
extern double Zone_Distans =20;
void OrderBuy() {
int ticket;
for(int i=0;i<3;i++)
{
double MyPoint=Point;
if( Digits==3 || Digits==5) MyPoint=Point*10;
ticket=OrderSend(Symbol(),OP_BUY, LotSize ,Ask,Slippage,Ask-StopLoss*MyPoint,Ask+TakeProfit*MyPoint,"Order Buy",MagicNumber,0,Green);
if(ticket>0){break;}
RefreshRates();
}
}
Pomoc - automatyczne przeciwstawne zlecenie do otwartego
Re: Pomoc - automatyczne przeciwstawne zlecenie do otwartego
ajć, sorry, nie to
Dobra, post do usuniecia, przerwa.
Dobra, post do usuniecia, przerwa.
Re: Pomoc - automatyczne przeciwstawne zlecenie do otwartego
-rookie- pisze:ajć, sorry, nie to
Dobra, post do usuniecia, przerwa.
dzięki za pomoc i podpowiedzi , ale chyba źle to trochę objaśniłem , więc mam 2 EA chciałem je połączyć w jedno .
1 EA ButtonEA otwiera pozycje po przyciśnięciu guzika BUY SELL itd.
2 EA Zone_Recovery_Area - po otwarciu pozycji BUY jak cena idzie w przeciwną stronę otwiera SELL i tak na przemian - tzw hedge
Chciałem do 1 EA wstawić funkcjonalność hedgeu z 2 EA , kombinowałem na różne sposoby i mi to nie wychodziło , więc poprosiłem o pomoc .
Gdyby mi ktoś to poprawił dla 1 guzika BUY to by wystarczyło kolejne bym sobie zrobił już sam
dzięki
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Re: Pomoc - automatyczne przeciwstawne zlecenie do otwartego
Chyba już nie ma tutaj za wiele osób zajmujących się kodowaniem... Nie mam teraz za bardzo chęci żeby grzebać się w tych EA, ale mogę podsunąć proste rozwiązanie jak ja bym sobie z tym poradził. Może dzięki temu wpadniesz jak to zaimplementować i rozwiązać w swoich EA.
Opis + obrazek - https://images89.fotosik.pl/35/a6130e80cb06747e.png
1. Włącz test EURUSD od 04.04.2018 tak jak na moim obrazku
2. Odległość w pipsach liczę tym wzrorem
3. W funkcji openHedgeByDirection() przerywam program na początku sprawdzając czy nie ma żadnych pozycji oraz sprawdzając calcLotSize() ponieważ zwraca to odchylenie albo w lewo albo w prawo wielkości lotów, więc jeśli hedge będzie otwarty wtedy jako wartość będzie zwracało 0, więc gdy już tak się stanie trzeba przerwać bo wywala błąd w ordersend. Możesz sprawdzić usuwając tą linie że po otwarciu hedge 20 pips dalej wywalać będzie błędy. Więc przy moim podejściu jest to potrzebne.
4. I na końcu funkcja calcLotSize() która liczy właśnie odchylenie od 0 na minus lub na plus wielkości lotów. Tylko jest to proste rozwiązanie dla 1 instrumentu, bez uwzględniania tego że będziesz miał włączone kilka takich EA itp. Prosty przykład. Możesz wrzucić do tego EA z guzikami tą funkcje i otwierać na BUY i SELL po 0.01 lota i będziesz widział że jak na BUY będziesz miał otwarte 0.56 a na SELL 0.73 to wynik będzie -0.17. Dlatego tam niżej musiałem to przemnożyć przez -1 żeby sprowadzić do dodatniej liczby ponieważ nie wolno wprowadzać minusowej wartości jako wielkość pozycji.
5. Tutaj jest kod z tym przykładem. Wygeneruj EA w generatorze, wklej ten kod, włącz od 04.04.2018 i zobaczysz jak to działa. Tylko tyle mogę pomóc w tej kwestii.
-- Dodano: 12 wrz 2018, 14:32 --
EA otwiera od razu pozycje SELL na 0.04 lota i akurat 04.04.2018 na EURUSD jest spadek więc to przetestujesz tutaj.
Opis + obrazek - https://images89.fotosik.pl/35/a6130e80cb06747e.png
1. Włącz test EURUSD od 04.04.2018 tak jak na moim obrazku
2. Odległość w pipsach liczę tym wzrorem
Kod: Zaznacz cały
double distance = NormalizeDouble(((Bid - OrderOpenPrice()) * getSymbolScale()), 2);
Kod: Zaznacz cały
if (calcLotSize() == 0) return;
5. Tutaj jest kod z tym przykładem. Wygeneruj EA w generatorze, wklej ten kod, włącz od 04.04.2018 i zobaczysz jak to działa. Tylko tyle mogę pomóc w tej kwestii.
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| 12092018_EA_xds123nr.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern int MagicNumber = 100;
extern int Slippage = 3;
extern double LotSize = 0.04;
extern double Zone_Distans = 20;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, 0, 0,"Sell["+0+"]", MagicNumber, 0, clrRed);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
openHedgeByDirection();
Print( " check test " + calcLotSize() );
}
//+------------------------------------------------------------------+
double calcLotSize() {
double res = 0;
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS)==true) {
if (OrderType() == 0) {
res = res += OrderLots();
} else if (OrderType() == 1) {
res = res -= OrderLots();
}
}
}
return NormalizeDouble(res,2);
}
void openHedgeByDirection() {
if (OrdersTotal() == 0) return;
if (calcLotSize() == 0) return;
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS)==true) {
double distance = NormalizeDouble(((Bid - OrderOpenPrice()) * getSymbolScale()), 2);
double lots = calcLotSize();
if (lots < 0) { lots = calcLotSize() * (-1); }
if (OrderType() == 0) {
if (distance < -Zone_Distans) {
OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0,"Sell[" + OrderTicket() + "]", MagicNumber, 0, clrRed);
}
} else if (OrderType() == 1) {
if (distance < -Zone_Distans) {
OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0,"Buy[" + OrderTicket() + "]", MagicNumber, 0, clrGreen);
}
}
}
}
}
double getSymbolScale() {
double res = 0;
if (Point == 0.00001) { // EURUSD, GBPUSD etc
res = 10000; // ok
} else if (Point == 0.001) { // USDJPPY etc
res = 1000;
} else if (Point == 0.01) { // DAX
res = 100;
}
return res;
}
EA otwiera od razu pozycje SELL na 0.04 lota i akurat 04.04.2018 na EURUSD jest spadek więc to przetestujesz tutaj.
Re: Pomoc - automatyczne przeciwstawne zlecenie do otwartego
-rookie- pisze:
EA otwiera od razu pozycje SELL na 0.04 lota i akurat 04.04.2018 na EURUSD jest spadek więc to przetestujesz tutaj.
Dzięki wielkie za pomoc , będę próbował może się uda i sobie jakoś z tym poradzę
jeszcze raz dzięki za tak obszerną odpowiedź
pozdr