Zamknięcie pozycji w/g zamknięcia świecy

O jezykach programowania w platformach i nie tylko.
hblekot
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 24 lut 2011, 09:06

Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: hblekot »

Czy ktoś może kiedyś widział albo posiada skrypt który działałby jako SL - a konkretnie zamykałby pozycje jeżeli świeca na określonym interwale zamknęłaby się powyżej/poniżej określonej ceny.

Na D1 można jeszcze sprawdzać jak się zamknął dzień - ale sprawdzanie poniżej staje się już z lekka upierdliwe.

Szukam już od dłuższego czasu czegoś takiego i nic konkretnego nie znalazłem.

optimus128
Gaduła
Gaduła
Posty: 122
Rejestracja: 05 sty 2011, 13:49

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: optimus128 »

Zrobiłem na szybko generatorem, przetestuj czy działa jak nie będzie działać to pisz - poprawię



#include <stdlib.mqh>
#include <WinUser32.mqh>

// exported variables
extern double cena_powyzej = 0;
extern double cena_ponizej = 0;


// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;

datetime BarTime1 = 0;


int init()
{
NDigits = Digits;

if (false) ObjectsDeleteAll(); // clear the chart


Comment(""); // clear the chart
}

// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}

OnEveryNewBar1();

}

void OnEveryNewBar1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
if (BarTime1 < Time[0])
{
// we have a new bar opened
BarTime1 = Time[0]; // keep the new bar open time
TechnicalAnalysis3();
TechnicalAnalysis8();

}
}

void TechnicalAnalysis3()
{
if (Close[current] > cena_powyzej)
{
CloseAll2();

}
}

void CloseAll2()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_SELL || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}
CloseAll6();

}

void CloseAll6()
{
int orderstotal = OrdersTotal();
int orders = 0;
int ordticket[30][2];
for (int i = 0; i < orderstotal; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() != OP_BUY || OrderSymbol() != Symbol())
{
continue;
}
ordticket[orders][0] = OrderOpenTime();
ordticket[orders][1] = OrderTicket();
orders++;
}
if (orders > 1)
{
ArrayResize(ordticket,orders);
ArraySort(ordticket);
}
for (i = 0; i < orders; i++)
{
if (OrderSelect(ordticket[1], SELECT_BY_TICKET) == true)
{
bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Red);
if (ret == false)
Print("OrderClose() error - ", ErrorDescription(GetLastError()));
}
}

}

void TechnicalAnalysis8()
{
if (Close[current] < cena_ponizej)
{
CloseAll2();

}
}



int deinit()
{
if (false) ObjectsDeleteAll();


}

hblekot
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 24 lut 2011, 09:06

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: hblekot »

testuje

Da sie tym obsługiwać kilka pozycji niezależnie- w sensie na kilku instrumentach, czy trzeba jakiś magic number wprowadzić żeby sie nie gryzło?

Zamknięcie świecy z jakiego interwału jest decydujące dla zamknięcia pozycji? Ten na którym uruchomiłem EA czy jakiś trzeba zdeklarować?

Jak to będzie działać - to po prostu powinieneś to sprzedawać - ja chyba przez rok nie znalazłem nic co by działało

optimus128
Gaduła
Gaduła
Posty: 122
Rejestracja: 05 sty 2011, 13:49

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: optimus128 »

Jest ustawione na taki interwał jaki jest aktualnie włączony na wykresie i powinno zamykać wszystkie pozycje na jakich włączone jest EA czyli jeśli jest włączone na eurusd to te zamyka i żadne inne. Aby zamykało konkretną pozycję to trzeba trochę zmodyfikować kod. "Cena powyżej" to cena powyżej której zamknięcie świecy powoduje zamknięcie pozycji, analogicznie "cena poniżej". Obie muszą być wpisane aby działało poprawnie (można wpisać jakąś odległą) i trzeba pamiętać aby cena powyżej nigdy nie była mniejsza od poniżej bo wtedy skrypt zacznie wariować.

hblekot
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 24 lut 2011, 09:06

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: hblekot »

Zamykać konkretnej nie musi - może zamykać wszystkie z danego intrumentu.

A nie będzie problemu między instrumentami? Można uruchomić na kilku wykresach i na każdym EA będzie działało niezależnie?

Bo jak rozumiem nie można jednocześnie działać na EURUSD na D1 i H4 na przykład na różnych wykresach , bo wtedy będzie problem, ale na różnych instrumentach będzie śmigać bez problemu na takim interwale na jakim otworzony jest wykres?

Ale :564: się należy

optimus128
Gaduła
Gaduła
Posty: 122
Rejestracja: 05 sty 2011, 13:49

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: optimus128 »

Można uruchomić na kilku wykresach i będzie niezależne. Jeśli chcesz mieć h4 i d1 równocześnie na tej samej parze to można otworzyć dwa wykresy i uruchomić 2x EA nie będzie to ze sobą kolidowało. Potestuj na demie na małych interwałach np. m1. m5 żeby było szybciej. Jak będzie dobrze działać na małych to i na dużych się sprawdzi.

hblekot
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 24 lut 2011, 09:06

Re: Zamknięcie pozycji w/g zamknięcia świecy

Nieprzeczytany post autor: hblekot »

Już mi wszystko gra jak gruźlikowi w piersiach

Podawałem jedną cenę tylko i wycinało zlecenie - trzeba podać obydwie - i działa idealnie. A jak można obsługiwać różne interwały po prostu na dodatkowych wykresach - to po prostu miodzio.
Chodzi jak w zegarku

Stary - nie wiesz jak mi życie ułatwiłeś

Podeślij adres to zaopatrze cię w prawdziwe :564:

ODPOWIEDZ