Prośba o pomoc, kod EA nie chcę się wykonać ?

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
PF
Bywalec
Bywalec
Posty: 14
Rejestracja: 11 kwie 2010, 14:47

Prośba o pomoc, kod EA nie chcę się wykonać ?

Nieprzeczytany post autor: PF »

Witam

Często piszę eksperty, i już dużo razy spotkałem się z dziwnym zjawiskiem.

Mianowicie, "sklejam" eksperta z gotowych funkcji, które poszczególnie działają poprawnie, a po "sklejeniu" do jednego Ea kod nie chcę sie wykonywać.


Wczoraj chciałem dopisać do jednego z Ea funkcję która by na początku miesiąca zamykała wszystkie zlecenia otworzone, wszystkię zlecenia oczekujące, oraz usuwała wszystkie obiekty z wykresu.


I albo za długo przesiedziałem przed komputerem, i nie widzę tam błędu w tym kodzie albo mql to dziadostwo.

poniżej przedstawiam kod:

Kod: Zaznacz cały

#property copyright "PF"
int start()
  {
//static int last=0;
//if(iTime(0,  PERIOD_MN1, 0)>last)
//{  last=Time[0]; zamknij_oczekujace(); CloseAll(OP_BUY);CloseAll(OP_SELL); czyszczenie(); Comment("powinnoczyscic");}

int t1=TimeMonth(iTime(0,0,0));
int t2=TimeMonth(iTime(0,0,1));
Comment(t1," != ",t2);
if(t1!=t2){czyszczenie();zamknij_oczekujace();CloseAll(OP_BUY);CloseAll(OP_SELL); Comment("powinnoczyscic");}
   return(0);
  }
//+------------------------------------------------------------------+
int czyszczenie()
{string nazwa;
for(int i=0;i<ObjectsTotal();i++)  {nazwa=ObjectName(i); ObjectDelete("nazwa");}
}
////////
int zamknij_oczekujace()           
{for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)  { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);  OrderDelete(OrderTicket());} 
return(0); 
}
///////
void CloseAll(int cmd) 
{ for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (OrderSymbol() == Symbol()) 
    {if (OrderType()==cmd&&cmd==OP_BUY ) 
        OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
        if (OrderType()==cmd&&cmd==OP_SELL ) 
         OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
} } } 
Z góry dziekuję serdecznie za pomoc
z tym problemem


Pozdrowienia
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 13 cze 2010, 11:50 przez PF, łącznie zmieniany 1 raz.

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

Nieprzeczytany post autor: Pierz Andrzej »

Kod: Zaznacz cały

for(int i=0;i<ObjectsTotal();i++)  {nazwa=ObjectName(i); ObjectDelete("nazwa");} 
powinno byc raczej :

Kod: Zaznacz cały

for(int i=0;i<ObjectsTotal();i++)  {nazwa=ObjectName(i); ObjectDelete(nazwa);} 
pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
PF
Bywalec
Bywalec
Posty: 14
Rejestracja: 11 kwie 2010, 14:47

Nieprzeczytany post autor: PF »

Pierz Andrzej pisze:

Kod: Zaznacz cały

for(int i=0;i<ObjectsTotal();i++)  {nazwa=ObjectName(i); ObjectDelete("nazwa");} 
powinno byc raczej :

Kod: Zaznacz cały

for(int i=0;i<ObjectsTotal();i++)  {nazwa=ObjectName(i); ObjectDelete(nazwa);} 
pzdr Andrzej
Witam pana Andrzeja,

fakt pierwszy błąd znaleziony, gdy skasowałem cudzysłów
EA zaczęło robic jedna z częsci, teraz zamyka otworzone zlecenia, ale nadal nie kasuje obiektów oraz zleceń oczekujących?

już mały postęp jest :) ,ale nie rozwiązuje to całego problemu, a dopiero 1/3

pozdrawiam i nadal czekam na podpowiedzi

//edit zlecenia oczekujace tez chyba kasuje ... jeszcze musze sprawdzic dokladnie bo zrobilem trzy testy dwa razy skasowalo raz nie
ale napewno nie kasuje obiektow

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

Nieprzeczytany post autor: Pierz Andrzej »

hmmm zacznijmy od funkcji czyszczacej :)

moze zobacz takie cosik :

Kod: Zaznacz cały

string nazwa; 
while (ObjectsTotal()>0)
{
   RefreshRates();
   nazwa=ObjectName(ObjectsTotal()-1); 
   ObjectDelete(nazwa);
}
pzdr A
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
PF
Bywalec
Bywalec
Posty: 14
Rejestracja: 11 kwie 2010, 14:47

Nieprzeczytany post autor: PF »

Pierz Andrzej pisze:hmmm zacznijmy od funkcji czyszczacej :)

moze zobacz takie cosik :

Kod: Zaznacz cały

string nazwa; 
while (ObjectsTotal()>0)
{
   RefreshRates();
   nazwa=ObjectName(ObjectsTotal()-1); 
   ObjectDelete(nazwa);
}
pzdr A
tak, zmiana petli i dodanie odswiezania.

Wczoraj probowalem i z petla while... rownież nie działało,
więc wychodzi na na to że jedynie odświeżanie pomogło !

chociaż w niektórych miesiącach, zostawia "troszeczke" śmieci obiektów, to w wiekszości sobie radzi

Bardzo Dziękuję za szybka i fachową pomoc !!

ODPOWIEDZ