Wszystkie pytania dozwolone początkujących programistów
Pytanie (mt4)
Chcę mieć ryzyko(koszt dotknięcia SL wyrażony w kasie) pojedyńczej operacji (w tym wypadku Long), dobrze liczę ?
Dzięki.
to do wskaźnika BasketProfit który zmieniłem dodając "money at risk(ile stracę jeżeli wszystko pójdzie na SL)", "risk %(w procentach konta)" i idiot mode z Tro_Rat zone(>x% i >50% wyświetli ładne ostrzeżenie)...
Chcę mieć ryzyko(koszt dotknięcia SL wyrażony w kasie) pojedyńczej operacji (w tym wypadku Long), dobrze liczę ?
Kod: Zaznacz cały
singlesymbolrisk=100000*OrderLots()*(OrderOpenPrice()-OrderStopLoss())*MarketInfo(Symbol(), MODE_TICKVALUE);
to do wskaźnika BasketProfit który zmieniłem dodając "money at risk(ile stracę jeżeli wszystko pójdzie na SL)", "risk %(w procentach konta)" i idiot mode z Tro_Rat zone(>x% i >50% wyświetli ładne ostrzeżenie)...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Re: Wszystkie pytania dozwolone początkujących programistów
Proszę o podpowiedź gdzie leży błąd. Mam taki oto kawałek kodu :
który w formie zaprezentowanej powyżej działa jak należy tzn. poprawnie określa istnienie otwartych pozycji. Wystarczy jednak, że dodam do niego warunek dotyczący MagicNumber - kod widoczny poniżej :
I funkcja przestaje działać jak należy - dodam, że mam na początku zadeklarowaną zmienną :
Gdzie tkwi błąd? Z góry dziękuję za pomoc...
Kod: Zaznacz cały
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==Symbol())) {
return(True);
}}}
return(false);
}
Kod: Zaznacz cały
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==Symbol())&& (OrderMagicNumber()==MagicNumber)) {
return(True);
}}}
return(false);
}
Kod: Zaznacz cały
extern int MagicNumber = 12234573;
Re: Wszystkie pytania dozwolone początkujących programistów
A kompluje się ? Wyświetla jakieś błędy ?
Solą życia jest kasa.
Re: Wszystkie pytania dozwolone początkujących programistów
Dzięki za odp. - wszystko kompiluje się bez problemu. W dalszej części EA funkcję wywołuję za pomocą :
Kod: Zaznacz cały
if (!ExistPositions()){
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
Re: Wszystkie pytania dozwolone początkujących programistów
mikolaj2 pisze:Dzięki za odp. - wszystko kompiluje się bez problemu. W dalszej części EA funkcję wywołuję za pomocą :
Kod: Zaznacz cały
if (!ExistPositions()){
a w funkcji OrderSend przypisujesz MagicNumber ?
z poważaniem
Andrzej Pierz
FOREX-SERVICE
Andrzej Pierz
FOREX-SERVICE
Re: Wszystkie pytania dozwolone początkujących programistów
Dziękuję - tu właśnie tkwił błądPierz Andrzej pisze: a w funkcji OrderSend przypisujesz MagicNumber ?


Re: Wszystkie pytania dozwolone początkujących programistów
Ja mam bardzo podobny problem. W kodzie poniżej powinienem pobierać ceny otwarcia zleceń i profit z konkretnych pozycji ale nic takiego się nie dzieje.
Kompiluje bezbłednie, GetLastError zwraca mi 0. Wcześniej chodziło ok ale kod był z dekompilatora i zachciało mi się zrobić go bardziej do przełknięcia. Zamiast jakiejś l_pos_548 zrobiłem k i szlag trafił całe ustrojstwo. Nigdzie więcej w kodzie nie pojawia się wspomniane l_pos_548 więc jestem trochę zdziwiony tą sytuacją. Otwarte zlecenia mają Magic, symbole Pair_1 prawidłowo działają a profitu i ceny nie pobiera. Ktoś może mnie oświecić? Z góry wielki dzięki za poświęcony czas.
Kod: Zaznacz cały
for (int k = 0; k < OrdersTotal(); k++) {
if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber() == 111) {
if (OrderSymbol() == Pair_1) {
profit_S1 = OrderProfit();
open_price_S1 = OrderOpenPrice();
}
}
}
}
Re: Wszystkie pytania dozwolone początkujących programistów
wrzuc ta sama petle w oryginalnej wersji - na pierwszy rzut oka nic szczegolnego tu nie widze.. ale moze trzeba porownac z oryginalem.sonixh pisze:Ja mam bardzo podobny problem.
jestes pewien ze nie zdublowales zmiennej k (czy jak tam sie nazywa ta oryginalna zmienna) ?
jestes pewien, ze nie pominales np. znaku + w
Kod: Zaznacz cały
profit_S1 = OrderProfit();
moze w oryginale jest np.:
Kod: Zaznacz cały
profit_S1 += OrderProfit();
Re: Wszystkie pytania dozwolone początkujących programistów
W oryginale jest :
itd. Takie pętle są dwie w całym kodzie więc w jednej użyłem i a w drugiej k. Dla jasności dodam, że pętle nie działają jednocześnie, albo działa jedna, albo druga w zależności od ustawienia na wejściu. Jeśli zmieniam obie literki na tą samą to nic mi nie daje. Dlaczego nie wykonuje prostej instrukcji ? 
Kod: Zaznacz cały
for (int l_pos_548 = 0; l_pos_548 < OrdersTotal(); l_pos_548++) {
if (OrderSelect(l_pos_548, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber() == 111) {
if (OrderSymbol() == Pair_1) {
l_ord_profit_72 = OrderProfit();
l_ord_open_price_24 = OrderOpenPrice();
}
}
if (OrderMagicNumber() == 222) {
if (OrderSymbol() == Pair_2) {
l_ord_profit_80 = OrderProfit();
l_ord_open_price_32 = OrderOpenPrice();
}
}
Kod: Zaznacz cały
l_ord_open_price_32 = OrderOpenPrice();
