Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.

iceman
Uczestnik
Uczestnik
Posty: 2
Rejestracja: 28 sie 2013, 09:09

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

Nieprzeczytany post autor: iceman »

Szukałem już na tej pierwszej stronie i po prostu nie ogarniam tego całego programowania zawsze błędy i nie wiem co dopisać co zmienić wiec jak by ktoś inny napisał jak to powinno wyglądać będę wdzięczny
Chciałem napisać ea który by otwierał zlecenia przeciwstawne w odległości x pip, dokładniej tłumacząc, otwieram dowolne zlecenie przykładowo buy teraz jeżeli cena spadnie o xx pipów to otworzy sie drugie zlecenie na sell
a jak nie to może od tego zaczniemy (cel taki sam ale krok po kroku to i ja bym zrozumiał)

Kod: Zaznacz cały

extern int MAGIC = 666;
extern double lot = 0.01;
extern int Stoploss = 800;
extern int Takeprofit = 400;
extern int Distance = 400;



int OnInit()
  {
//---
   if(OrdersTotal()==0)
      {
      OpenBuyStop();
      OpenSellStop();
     
      }
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
  }

void OpenSellStop()
{
double price = Bid - Distance*Point;

 while(!OrderSend(Symbol(),OP_SELLSTOP,lot,NormalizeDouble(price, Digits),2,NormalizeDouble(price+Stoploss*Point, Digits),NormalizeDouble(price-Takeprofit*Point, Digits),"PendingSellStop",MAGIC,0,Red))
   {
   Comment(GetLastError());
   }
}


void OpenBuyStop()
{
double price = Ask + Distance*Point;

 while(!OrderSend(Symbol(),OP_BUYSTOP,lot,NormalizeDouble(price, Digits),2,NormalizeDouble(price-Stoploss*Point, Digits),NormalizeDouble(price+Takeprofit*Point, Digits),"PendingBuyStop",MAGIC,0,Blue))
   {
   Comment(GetLastError());
   }
}
i teraz dlaczego otworzyło mi po jednym zleceniu a nie cały czas, czyli bierze tp albo sl i zleca następne bierze tp albo sl i następne i tak w kółko, druga sprawa to na początku chciałem otworzyć zlecenie natychmiastowe i do tego automatycznie oczekujące właśnie z zadanym dystansem

Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

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

Nieprzeczytany post autor: adamForex »

OnInit() wykonuje się tylko raz, przy ładowaniu EA.
Przede wszystkim powinieneś umieścić wywołanie swoich funkcji w OnTick().

W drugiej kolejnosci musisz uzależnić cenę wystawienia zlecenia od poprzedniego zlecenia (właściwości zlecenia).
price = Ask + Distance*Point; - to za każdym razem zwraca cenę o jakiś poziom zwiększony o dystans, ale nie ma to żadnego związku z Twoim poprzednim zleceniem.

Stiopa
Bywalec
Bywalec
Posty: 15
Rejestracja: 13 kwie 2015, 21:28

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

Nieprzeczytany post autor: Stiopa »

Jak Ci to napiszę to i tak nic to nie da. Jeśli chcesz realizować swoje pomysły to musisz nauczyć się pisać programy. A jak nie chcesz pisać to szukaj. 95 % pomysłów została już napisana. Może przesadzam ale większość. W tamtym roku napisałem kilkanaście tego typu EA. Może troszkę bardziej zaawansowanych. Tak z ciekawości zobacz. Ekspert cztero-systemowy z możliwością handlu pół-automatycznego. Link: https://youtu.be/-A4Ky4LuzwQ

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

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

Nieprzeczytany post autor: JAREK67 »

Z tymi wszystkimi EA, które grają na różne kombinacje wybić z boxów, z tymi elementami typu recovery wszystko ładnie wygląda, ale tylko na filmach. Jak (co w zasadzie jest regułą) dane historyczne na takim filmie są byle jakie to widać, że handel w oparciu o wychodzenie ze stref jest bardzo dobrym pomysłem. W praktyce jest inaczej. Cena potrafi niezliczoną liczbę razy wracać do strefy po wybiciu, aktywując SL, pozycje odwrotne, zależy jak to jest pomyślane. W efekcie straty rosną i cały piękny plan w piz... ;)
Na FF jakiś gość sprzedawał coś podobnego za 800 USD.
Też piękne filmy wklejał. Same zyski były. Ale na swoje nieszczęście udostępnił do testów demo jedną z wersji.
Jedna wielka porażka.

Stiopa
Bywalec
Bywalec
Posty: 15
Rejestracja: 13 kwie 2015, 21:28

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

Nieprzeczytany post autor: Stiopa »

Zamieściłem tak z ciekawości dla icemana. Tak,tak dane na filmie są kiepskiej jakości bo chodziło mi o czas. Jest to wersja komercyjna i testowana na na jakości modelowania 99,9 [Tick Data]. Kupiło go kilku Azjatów i jak na razie psów na mnie nie wieszają. Nie na mawiam nikogo do kupna. Osobiście używam go (albo podobne) w trybie Semi-Auto [ale też nie regularnie bo praktycznie codziennie piszę coś nowego]. W trybie automatycznym 0.01(początkowy) Lota zyski są małe (30-50 dolarów miesięcznie za okres od listopada do końca stycznia). Chodziło mi o pokazanie różnych możliwości składania zleceń oczekujących. W tym EA zastosowałem wiele rozwiązań ale mam też wiele innych EA które analizują historię obliczają statystyki wybić ze stref, ustawiają wirtualne transakcje, porównują to z innymi parami, obliczają tak zwana "cuda wianki" itd. Jak sam programujesz to wiesz, że pomysłów nie ma końca.
Pozdrawiam


Awatar użytkownika
MarcinMC
Stały bywalec
Stały bywalec
Posty: 78
Rejestracja: 01 kwie 2014, 16:56

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

Nieprzeczytany post autor: MarcinMC »

Hej chciałbym zapytać, jak odczytywać cenę otwarcia i zamknięcia świeczki o danej godzinie ?

iHigh i iLow to wiem.
Skype marcinmc92

Awatar użytkownika
adamForex
Gaduła
Gaduła
Posty: 117
Rejestracja: 28 gru 2015, 10:24

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

Nieprzeczytany post autor: adamForex »

Mam taki przykładowy kod, niezbyt elegancki, ale zawsze to jakiś punkt wyjścia. Kluczem jest funkcja iBarShift, która zwraca indeks świecy na danym interwale dla danej daty. Jak chcesz od razu pobrać dane historyczne, to można w pętli wygenerować jakieś stringi z datami (nawet nieistniejącymi) i po prostu odfiltrować wyniki, w których iBarShift zwróci -1

Albo w ogóle można przejść w pętli przez historię i sprawdzać warunek czy wartość Hour() zmieniła się na szukaną godzinę i jak tak, to sobie do jakiejś tablicy zapisywać aktualną cenę.

Kod: Zaznacz cały

string data; 
int godzina = 7;
int numerSwiecy;

void OnStart()
  {
//---
   
   data = Year()+"."+Month()+"."+Day()+" "+godzina;
   numerSwiecy=iBarShift(Symbol(),PERIOD_H1,StrToTime(data),true);
   
   Print(iOpen(Symbol(),PERIOD_H1,numerSwiecy));
   
  }
//+------------------------------------------------------------------+
Tu link do dokumentacji na temat iBarShift:
https://docs.mql4.com/series/ibarshift

Tomson
Gaduła
Gaduła
Posty: 113
Rejestracja: 08 wrz 2011, 19:16

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

Nieprzeczytany post autor: Tomson »

Witam,
moje EA zamyka wszystkie zlecenia na danej parze walutowej, niezależnie czy są to zlecenia otwarte przez EA, czy np ręcznie. Jaki parametr powinien być zawarty, aby EA zarządzało zleceniami tylko otwartymi przez siebie.

Domyślam się, że trzeba dodać parametr magic number, ale nie wiem jak;/

Z góry dzięki za pomoc

ODPOWIEDZ