Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Ustal sobie cenę otwarcia pozycji, a w warunku otwierania pozycji daj : jeśli Bid przekroczy tą cenę to "otwieraj".
PS. sorry..myślałem, że masz już EA i chcesz tylko dodać opcję.
Solą życia jest kasa.

Awatar użytkownika
peter_r
Pasjonat
Pasjonat
Posty: 565
Rejestracja: 08 sty 2012, 11:09

Nieprzeczytany post autor: peter_r »

Pytanie (mt4)
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);
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)...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: mikolaj2 »

Proszę o podpowiedź gdzie leży błąd. Mam taki oto kawałek kodu :

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);
}
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 :

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);
}
I funkcja przestaje działać jak należy - dodam, że mam na początku zadeklarowaną zmienną :

Kod: Zaznacz cały

extern int MagicNumber = 12234573; 
Gdzie tkwi błąd? Z góry dziękuję za pomoc...

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: personov »

A kompluje się ? Wyświetla jakieś błędy ?
Solą życia jest kasa.

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: mikolaj2 »

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()){

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: Pierz Andrzej »

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

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: mikolaj2 »

Pierz Andrzej pisze: a w funkcji OrderSend przypisujesz MagicNumber ?
Dziękuję - tu właśnie tkwił błąd :-) Wnoszę o pochwałę dla użytkownika Pierz Andrzej oraz Personov - za zaangażowanie i chęć niesienia pomocy :-)

Awatar użytkownika
sonixh
Stały bywalec
Stały bywalec
Posty: 57
Rejestracja: 13 sty 2011, 19:26

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: sonixh »

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.

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();
                  }
               }
          }
       }
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.
Obrazek

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: CoVal »

sonixh pisze:Ja mam bardzo podobny problem.
wrzuc ta sama petle w oryginalnej wersji - na pierwszy rzut oka nic szczegolnego tu nie widze.. ale moze trzeba porownac z oryginalem.
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();
tak zeby sumowal profit wszystkich pozycji Pair_1 a nie tylko jednej ostatniej ?
moze w oryginale jest np.:

Kod: Zaznacz cały

profit_S1 += OrderProfit();

Awatar użytkownika
sonixh
Stały bywalec
Stały bywalec
Posty: 57
Rejestracja: 13 sty 2011, 19:26

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: sonixh »

W oryginale jest :

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();
                  }
               }
 
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

  l_ord_open_price_32 = OrderOpenPrice(); 
:?:
Obrazek

ODPOWIEDZ