gdzie jest błąd

O jezykach programowania w platformach i nie tylko.
green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

NiceFox pisze:Kod jest gieroja nie mój. Nie jestem pewien czy coś takiego miałeś na myśli?
Nie. To nie ma sensu. Po cholerę Ci te 2 ify ?
Po cholerę te switch'e ?
Po cholerę magic_1 magic_2 ?
Przecież to wszystko można zrobić dużo prościej,
deklarujesz w funkcję z 2ma parametrami nazwanymi powiedzmy AMagic i AOrderType

potem for, j.w. i w nim mniej więcej:

Kod: Zaznacz cały


if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
  if (OrderSymbol()==Symbol())
  {
     if (AMagic != -1 && OrderMagicNumber() != AMagic)
       Continue;
    if (OrderType() ==  AOrderType)
      trades++
  }
} 
I tyle. Wołasz to potem np. tak:
checkorders(-1, OP_BUY) -> zlicza wszystkie buy
checkorders(5, OP_SELL) -> zlicza wszystkie sell dla magicno = 5
Green
Obrazek
Obrazek

unsec
Bywalec
Bywalec
Posty: 6
Rejestracja: 05 gru 2010, 16:56

Nieprzeczytany post autor: unsec »

witam, mam pytanko związane z funkcją OrderSelect więc podczepiam się, moze też ktoś skorzysta.

otóż tak:
1. mam jednocześnie otwarte dwie karty, EURUSD (kwotowane 4 cyfry) i EURUSD:) (kwotowane 5 cyfr)
2. na obu kartach chodzi ten sam wskażnik. Jedna z jego funkcji ma odnaleźć OSTATNIĄ (czyli najnowszą) otwartą transakcję z danego symbolu. Czyli na karcie EURUSD powinno mi wyświetlić ostatnią transakcję z symbolu EURUSD a na karcie EURUSD:) ostatnią otwartą transakcję z tegoż symbolu.
3. niestety, gnebiony przeze mnie skrypt wyświetla na obu kartach tę samą, ostatnią w kolejności (czyli najnowszą otwartą) transakcję, mimo że zmienna symbolu rozpoznawana jest własciwie tzn. na każdej karcie wyświetlana jest inna.

bardzo prosze o ew. korektę używanego przeze mnie skryptu lub jakis odkrywczy, świeży pomysł :))
i dzieki serdecznie za pomoc

Kod: Zaznacz cały


      for(pos=0; pos <OrdersTotal() ; pos++)             // liczenie od tyłu
        if (OrderSelect(pos, SELECT_BY_POS) )        
           {
 
           TicketType=OrderType(); //OP_BUY OP_SELL
           if (TicketType == OP_BUY)
              {TicketTypeStr = "B";}
           else if (TicketType == OP_SELL)
              {TicketTypeStr = "S";}          
 }
w efekcie mamy też DoubleToStr(OrderOpenPrice() która jest używana do wyświetlenia ceny zawarcia danej transakcji

niestety, chwyt typu
if (OrderSelect(pos, SELECT_BY_POS) && OrderSymbol() == Symbol() )
i jego pochodne nie działają. Oczywiście, można by go ograniczyc do czytania po wskazanym symbolu ale, z natury rzeczy, lepsze są rozwiazania ogólne niż szczegółowe :)


Właściwie - na wyjściu potrzebne mi są następujące informacje związane z ostatnią zawartą otwartą transakcją dla symbolu na którego karcie będą wyświetlane
1.TicketTypeStr
2. DoubleToStr(OrderOpenPrice()

unsec
Bywalec
Bywalec
Posty: 6
Rejestracja: 05 gru 2010, 16:56

Nieprzeczytany post autor: unsec »

ups, zdaje się że niezły zgryz ten mój problem, hmmm ...

unsec
Bywalec
Bywalec
Posty: 6
Rejestracja: 05 gru 2010, 16:56

Nieprzeczytany post autor: unsec »

chyba najbardziej stosowne będzie tutaj stare porzekadło elektryków - prąd płynie tam gdzie on chce a nie tam gdzie chce elektryk. I adekwatnie jest w tej sytuacji - funkcje działają tak jak mają to w swej naturze a nie tak jak ubzdura sobie namiastka programisty :).

Generalnie wszystko działa, wewnątrz pierwszego ifa dodałem

Kod: Zaznacz cały

           double Price=OrderOpenPrice();
co uporządkowało ten galimatias.

Dzięki tym wszystkim którym zechciało sie zaglądnąć do tego problemu, a że nikt nie miał pomysłu to musiałem poznęcać się nad swoimi szarymi i znalazłem rozwiązanie co niewątpliwie poprawiło mi dziś samopoczucie :) :).
pzdr.

ODPOWIEDZ