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 »

Myślałem nad czymś takim :

Kod: Zaznacz cały

int GetTick;
void start()
{
double czas=GetTickCount()-GetTick;
//......................
GetTick=GetTickCount();
}
czas określa teraz ile milisekund minęło od ostatniego ticku.
Może można tego użyć do tego ile milisekund minęło od czasu nastąpienia nowej sekundy ?
Tylko jak określić przeskok nowej sekundy ?
Solą życia jest kasa.

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

Nieprzeczytany post autor: Pierz Andrzej »

personov pisze:Myślałem nad czymś takim :

Kod: Zaznacz cały

int GetTick;
void start()
{
double czas=GetTickCount()-GetTick;
//......................
GetTick=GetTickCount();
}
czas określa teraz ile milisekund minęło od ostatniego ticku.
Może można tego użyć do tego ile milisekund minęło od czasu nastąpienia nowej sekundy ?
Tylko jak określić przeskok nowej sekundy ?
nie bardzo , od ostatniego tiku tak ale inaczej tego nie wykozystasz


skompiluj sobie biblioteke dll i uzyj jej w kodzie bedzie Ci zwracala milisekundy ;)

Kod: Zaznacz cały

#include <windows.h> 
#include <sys/time.h>

extern "C" __declspec(dllexport) __stdcall size_t fun();
size_t fun()
{
     struct timeval t;   
     gettimeofday(&t, NULL);  
     return (tim.tv_usec/1000);  
}
pozdrawiam
Andrzej

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

Pierz Andrzej pisze:czas brokera ( TimeCurency() ) odswieza sie co nowe kwotowanie na jakies parze walutowej wiec moga wystepowac luki .

GetTickCount nie zwraca Ci czasu anlokalnego ani tymbardziej brokera, zwracana wartosc to czas od uruchomienia komputera ;)


co do prowizji nie przypomnam sobie zadnej funcki zwracajacej taka wartosc ...

pozdrawiam
Andrzej
A jakby to wyciągnął z historii konta, kwota commision od pozycji i wielkość pozycji dla walora można by policzyć prowizję dla 1 lota?
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

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

Nieprzeczytany post autor: Pierz Andrzej »

mike_05 pisze: jakby to wyciągnął z historii konta, kwota commision od pozycji i wielkość pozycji dla walora można by policzyć prowizję dla 1 lota?
tak jest to alternatywne wyjscie;)

zarowno z historii jak i aktulanie otwartego zlecenia mozna wyciagnac kwote commission (OrderCommision()) jak i lota (OrderLots())

Kod: Zaznacz cały

double prowizja = OrderCommission() * (1.0 / OrderLots());//prowizja dla 1 lota
pozdrawiam
Andrzej Pierz

ZdolnyLen
Bywalec
Bywalec
Posty: 17
Rejestracja: 29 gru 2009, 14:21

Nieprzeczytany post autor: ZdolnyLen »

witam
1. czy moje EA moze grać na wielu instrumentach na raz?
jaki kod musze mieć żeby z poziomu jednego EA realizować zlecenia z kilku mini systemow ?

Kod: Zaznacz cały

if(Hour()>7&&Hour()<9) 
{ 
   if (Volume[0] == 1) 
   { 
      if(Close[0]>Close[6]) 
      { 
      buy = OrderSend(Symbol(),OP_BUY,1,Bid,3,Bid-15*Point,Ask+15*Point); 
      } 
   } 
} 
2. grajac na interwale 1h "Hour()>7&&Hour()<9" czy nie moge tego kodu zamienic na Hour()==8 ?

3. jaki powinienem dopisać kod żeby w momencie wejscia na pozycje tak jak w powyższym przykładzie włączyło sie odliczanie czasowe wyjscia z pozycji. np. wyjscie po 6h od wejscia transakcji.

4.jeszcze jedna prośba. czy mógłby ktoś podać przykład EA gotowego do gry, zawierajacego wszystkie potrzebne ustawienia które bardziej od strony logistycznej zabezpieczą mnie przed błedami które moga uniemozliwic realizacje zlecen?

nigdy nie robilem wlasnego EA w mt4 i nie wiem czego moge sie spodziewać przy realizacji strategi na zywo,

na co powinienem zwrócić uwage?

z góy dziekuję

Dodano po 36 minutach:

w jaki sposob zapisać o danej godzienie np. 14 , max cene z np. 6 godzin ktora nie bedzie sie mzieniala do nastepnej 14?

w jaki sposob na interwale godzinnym pobrać dane z wyzszego interwalu np. dziennego cene high/low z wczoraj?

Dodano po 14 minutach:

chciałbym zamiast standardowych kratek na wykresach wyswietlac pianowe linie konkretnej godziny np. swiecy o 12. jak to zrobic?

w jaki sposób ustawić domyślny wykres zeby przy otwarciu nowego waloru otwierał automatycznie moje ustawienia np. wykres czarne swiece biale tle, i te linie o konkretnej godzinie?

Dodano po 1 godzinach 46 minutach:

kolejne pytanie co powinno byc zawarte w cześci init() i deinit() dla EA do gry real?

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

Nieprzeczytany post autor: Pierz Andrzej »

ZdolnyLen pisze:1. czy moje EA moze grać na wielu instrumentach na raz?
jaki kod musze mieć żeby z poziomu jednego EA realizować zlecenia z kilku mini systemow ?
tak podczas szukania zlecen otwrtych przez EA w warunkach sprawdzasz czy Para walutowa jest taka sama proponuje tez uzyc magic number

przykladowa funkcja zamykajaca zlecenia

Kod: Zaznacz cały

void order.close(int order.type)
{
   RefreshRates();
   for (int i = OrdersTotal() - 1;i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (Symbol() == OrderSymbol() &&order.magic == OrderMagicNumber() && order.type == OrdreType() )
      {
         bool ticket = true;
         if (OrderType() == OP_BUY ) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,100,long);
         if (OrderType() == OP_SELL) ticket = OrderClose(OrderTicket(),OrderLots(),Ask,100,short );
         if (ticket == false) Print("Error close "+ErrorDescription(GetLastError()));
      }
   }
}
ZdolnyLen pisze:2. grajac na interwale 1h "Hour()>7&&Hour()<9" czy nie moge tego kodu zamienic na Hour()==8 ?
tak mozesz
ZdolnyLen pisze:3. jaki powinienem dopisać kod żeby w momencie wejscia na pozycje tak jak w powyższym przykładzie włączyło sie odliczanie czasowe wyjscia z pozycji. np. wyjscie po 6h od wejscia transakcji.
jest kilka mozliwosci mozesz zapisac czas do zmiennej podczas otwierania transakcji
lub przeszukujac otwrte pozycje porownywac aktalny czas z zcasem otwarcia zlecenia


ogolnie to bardzo duzo chcesz naraz pochlanac :D

init() - jest to funkcja ktora jest wykonywana tylko raz podczas uruchamiania np EA na wykresie

deinit() - jest to funkcja ktora jest rowniez wykonywana tylko raz z ta rzonica ze wykonywana jest podczas usuwania EA z wykresu

start() - funkcja ktora wykonywana jest za kazdym razem gdy nadchodzi nowy tick ( nowe kwotowanie)

pozdrawiam
Andrzej

ZdolnyLen
Bywalec
Bywalec
Posty: 17
Rejestracja: 29 gru 2009, 14:21

Nieprzeczytany post autor: ZdolnyLen »

wielkie dzieki!
jest kilka mozliwosci mozesz zapisac czas do zmiennej podczas otwierania transakcji
lub przeszukujac otwrte pozycje porownywac aktalny czas z zcasem otwarcia zlecenia
jezeli te ilosc godzin utrzymania pozycji mam z gory ustaloną np. 6h albo idąc jeszcze dalej moge z gory ustalić dokładną godzinę wyjścia tylko jak polaczyc wejscie na pozycje z wyjsciem zeby nie okazalo sie ze EA nie weszlo na pozycje a pozniej bedzie chcialo tak czy tak zamknąć nie otwartą pozycje

no i zostały jeszcze pytania na które nie znam odpowiedzi

w jaki sposob zapisać o danej godzienie np. 14 , max cene z np. 6 godzin ktora nie bedzie sie mzieniala do nastepnej 14?

w jaki sposob na interwale godzinnym pobrać dane z wyzszego interwalu np. dziennego cene high/low z wczoraj?

chciałbym zamiast standardowych kratek na wykresach wyswietlac pianowe linie konkretnej godziny np. swiecy o 12. jak to zrobic?

w jaki sposób ustawić domyślny wykres zeby przy otwarciu nowego waloru otwierał automatycznie moje ustawienia np. wykres czarne swiece biale tle, i te linie o konkretnej godzinie?

dzieki

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

Nieprzeczytany post autor: personov »

Czy jest jakis sposób, aby zapisać dane do pliku .CSV, ale w określonej lokalizacji ?
Czyli nie do experts/files, ale do podanej ścieżki np. : C/....
Solą życia jest kasa.

MkubuxK
Pasjonat
Pasjonat
Posty: 1051
Rejestracja: 20 maja 2009, 18:27

Nieprzeczytany post autor: MkubuxK »

Jest. Musisz użyć zewnętrznej biblioteki kernel32.dll.


http://articles.mql4.com/720
http://codebase.mql4.com/4086

Tu masz gotowe funkcje do użycia.
fx-forum

remyg
Bywalec
Bywalec
Posty: 15
Rejestracja: 26 maja 2012, 19:04

Nieprzeczytany post autor: remyg »

Co decyduje o wyświetlaniu koloru we wskaźniku? Oto screen z tego jak to wygląda w praktyce: http://i.imgur.com/dt6Yq.png

Wklejam pełen kod wskaźnika Synergy_APB

Kod: Zaznacz cały

#property copyright "Copyright ˆ 2009, CompassFX"
#property link      "http://www.compassfx.com"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 DodgerBlue
#property indicator_color3 Red
#property indicator_color4 DodgerBlue

extern string Custom_Indicator = "Synergy Average Price Bars";
extern string Copyright = "ˆ 2009, CompassFX";
extern string Web_Address = "www.compassfx.com";
double gda_100[];
double gda_104[];
double gda_108[];
double gda_112[];
int gi_116 = 0;

int init() {
   SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);
   SetIndexBuffer(0, gda_100);
   SetIndexLabel(0, "HA_0");
   SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, DodgerBlue);
   SetIndexBuffer(1, gda_104);
   SetIndexLabel(1, "HA_1");
   SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 3, Red);
   SetIndexBuffer(2, gda_108);
   SetIndexLabel(2, "HA_Open");
   SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 3, DodgerBlue);
   SetIndexBuffer(3, gda_112);
   SetIndexLabel(3, "HA_Close");
   SetIndexDrawBegin(0, 10);
   SetIndexDrawBegin(1, 10);
   SetIndexDrawBegin(2, 10);
   SetIndexDrawBegin(3, 10);
   SetIndexBuffer(0, gda_100);
   SetIndexBuffer(1, gda_104);
   SetIndexBuffer(2, gda_108);
   SetIndexBuffer(3, gda_112);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   double ld_0;
   double ld_8;
   double ld_16;
   double ld_24;
   if (Bars <= 10) return (0);
   gi_116 = IndicatorCounted();
   if (gi_116 < 0) return (-1);
   if (gi_116 > 0) gi_116--;
   for (int li_32 = Bars - gi_116 - 1; li_32 >= 0; li_32--) {
      ld_24 = NormalizeDouble((Open[li_32] + High[li_32] + Low[li_32] + Close[li_32]) / 4.0, Digits);
      ld_24 = (ld_24 + Close[li_32]) / 2.0;
      ld_0 = (gda_108[li_32 + 1] + (gda_112[li_32 + 1])) / 2.0;
      ld_8 = MathMax(High[li_32], MathMax(ld_0, ld_24));
      ld_16 = MathMin(Low[li_32], MathMin(ld_0, ld_24));
      if (ld_0 < ld_24) {
         gda_100[li_32] = ld_16;
         gda_104[li_32] = ld_8;
      } else {
         gda_100[li_32] = ld_8;
         gda_104[li_32] = ld_16;
      }
      gda_108[li_32] = ld_0;
      gda_112[li_32] = ld_24;
   }
   return (0);
}
Rzuciłem sobie wszystkie 4 bufory do iCustom, ale one zawierają jedynie wartości double. Nie mogę zrozumieć co decyduje o tym, że niektóre słupki są niebieskie a inne czerwone. Prośba o pomoc.

ODPOWIEDZ