Forex programozás › Fórum › Kérdések az MQL4 programozási nyelvvel kapcsolatban › OrderSelect › Válasz erre: OrderSelect
Szia Hornet!
A következő hibákat javítsd:
- soha ne használj fix ciklust; használd a ciklusban az OrdersTotal() / OrdersHistoryTotal() -t; szerintem ez a bajaid fő forrása
- a tömbökkel való munkában a lényeg a dinamikusság; írj ciklust arra, hogy keress egy kétdimenziós tömbben, mert ha 100 pozíciót akarsz kezelni akkor nem írhatod végig a 100 indexet a feltételekben
- a continue használata a legtöbbször nem indokolt; építsd fel úgy az if feltételeket, hogy eleve továbbmenjen a ciklus
- a kommentelés jó dolog, de használj konstansokat is, hogy olvasható legyen a kódod (1-es helyett OP_SELL használata); ha 1 hónap múlva megnézed majd, akkor is tudni kellene, hogy mit akartál egy-egy kódrészlettel
- ha már ismered a ticket számokat, akkor OrderSelect-nél is használhatod azokat
- az egymásba ágyazott ciklusok előnytelenül vannak elkészítve, ezért sokkal többször használod az erőforrásokat, mint az indokolt lenne; elég egyszer végigmenni minden pozíción, és körönként menteni a fontos adatokat a tömbbe
- szükségtelen két külön OrderSelect(); a pozíciót ticket szám alapján válaszd ki, ekkor a program automatikusan ki fogja választani (nem neked kell döntened, hogy melyik pool-ban kell kotorásszon). A kiválasztás után az OrderCloseTime() alapján eldönthető, hogy lezárt vagy élő pozícióról van szó
- a Számlatörténet fülön történő dátumkorlátozásra is figyelj, mert amennyiben a felhasználó lekorlátozza a számlatörténet megjelenített időszakát, az expertek sem férnek hozzá azokhoz a pozícióadatokhoz, amelyek nem látszanak
- boolean vizsgálatnál szükségtelen a == true; elég pl. az if (OrderSelect(h, SELECT_BY_POS)) { }
- az eredeti kérdés kapcsán pedig: írasd ki Print() segítségével hogy mely pozíciónál kapsz false -t vissza, így kiderül, hogy mi a hibás ticket szám amit ki akarsz választani – ennek alapján lehet majd tovább menni a nyomozásban. Lehet, hogy rossz / nem létező indexet akarsz kiválasztani, vagy nullát.