Nie działa funkcja start() w MetaTraderze.

O jezykach programowania w platformach i nie tylko.
FX
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 21 cze 2012, 19:35

Nie działa funkcja start() w MetaTraderze.

Nieprzeczytany post autor: FX »

Napisałem strategie, która ma zapisywać każdy tick. Jak rozumiem funkcja start() wykonuje się dla każdego ticku. Dlaczego więc nie zapisuje ticków. W czym może być problem.

int start()
{
string strSymbol="EURUSD";
double bid =MarketInfo(strSymbol,MODE_BID);
double ask =MarketInfo(strSymbol,MODE_ASK);
double time =MarketInfo(strSymbol,MODE_TIME);
string strDate=TimeToStr(time,TIME_DATE);
string strTime=TimeToStr(time,TIME_SECONDS);
int FileHandle;
FileHandle=FileOpen("tick.txt",FILE_WRITE|FILE_READ|FILE_CSV,",");
FileSeek(FileHandle, 0, SEEK_END);
FileWrite(FileHandle,strDate,strTime,bid,ask);
//Print(bid,",",ask);
FileClose(FileHandle);
return(0);
return(0);
}

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

U mnie działa.
Przy wrzucaniu strategii na wykres trzeba zaznaczyć umożliw handel .
Plik zapisuje się w

Kod: Zaznacz cały

folder z terminalem\experts\files
właściwie powinno być :

Kod: Zaznacz cały

FileHandle=FileOpen("tick.txt",FILE_WRITE|FILE_READ|FILE_CSV,',');  //<<--- ','
Nie spiesz się , zawsze zdążysz stracić .

FX
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 21 cze 2012, 19:35

Nieprzeczytany post autor: FX »

Dodałem umożliw handel, ale nie zapisuje. Print("cos") umieszczony w start() też nie działa. Nie mam pomysłu co jest nie tak.

dulf
Pasjonat
Pasjonat
Posty: 399
Rejestracja: 24 kwie 2010, 15:13

Nieprzeczytany post autor: dulf »

Wklej ten kod :

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() 
 { 
 string strSymbol="EURUSD"; 
 double bid =MarketInfo(strSymbol,MODE_BID); 
 double ask =MarketInfo(strSymbol,MODE_ASK); 
 double time =MarketInfo(strSymbol,MODE_TIME); 
 string strDate=TimeToStr(time,TIME_DATE); 
 string strTime=TimeToStr(time,TIME_SECONDS); 
 int FileHandle; 
 FileHandle=FileOpen("tick.txt",FILE_WRITE|FILE_READ|FILE_CSV,','); 
 FileSeek(FileHandle, 0, SEEK_END); 
 FileWrite(FileHandle,strDate,strTime,bid,ask); 
 //Print(bid,",",ask); 
 FileClose(FileHandle); 
 return(0); 

 }
//+------------------------------------------------------------------+
Obrazek
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Nie spiesz się , zawsze zdążysz stracić .

FX
Uczestnik
Uczestnik
Posty: 3
Rejestracja: 21 cze 2012, 19:35

Nieprzeczytany post autor: FX »

Niestety nie działa. Jak kod wkleję do init() i zrobię pętlę działa. Ale powinno działać ze start(). W opisie MT4 jest, że kod w start() wykonuje się dla każdego ticku. Chcę rozwiązać ten problem, bo piszę dużo bardziej skomplikowaną strategię i włąśnie testuję w ten sposób funkcję start(). Chciałbym wiedzieć co robię źle, że ta funkcja nie działa.


int init()
{
while(true)
{
Dump("Tick-"+TimeToStr(TimeCurrent()));
string strSymbol="EURUSD";
double bid =MarketInfo(strSymbol,MODE_BID);
double ask =MarketInfo(strSymbol,MODE_ASK);
double time =MarketInfo(strSymbol,MODE_TIME);
string strDate=TimeToStr(time,TIME_DATE);
string strTime=TimeToStr(time,TIME_SECONDS);
int FileHandle;
FileHandle=FileOpen("tick.txt",FILE_WRITE|FILE_READ|FILE_CSV,",");
FileSeek(FileHandle, 0, SEEK_END);
FileWrite(FileHandle,strDate,strTime,bid,ask);
//Print(bid,",",ask);
FileClose(FileHandle);
}

return(0);
}

Dodano po 5 minutach:

Nie ma ryjka!!! Co zrobić? U Ciebie działa ten kod ze start()?

Dodano po 6 minutach:

Wiem w czym rzecz!!! Nie włączyłem przycisku "Włącz strategie". Myślałem, że dodanie wystarcza. Bez tego działają tylko funkcje init() i deinit(). Dzięki za pomoc!!!

Awatar użytkownika
Matteo
Stały bywalec
Stały bywalec
Posty: 64
Rejestracja: 02 mar 2007, 23:09

Nieprzeczytany post autor: Matteo »

Powodzenia przy pisaniu "dużo bardziej skomplikowanej strategii" :)

ODPOWIEDZ