Forex programozás › Fórum › Egyéb › bróker szerver túlterhelés
-
SzerzőBejegyzés
-
Szia Radu és bárki akinek tapasztalata van!
Fura gondom akadt: Fejlesztgettem egy EA-t, ami demo számlán több páron minden különösebb gond nélkül futott. Ugyanez a jószág éles számlán egy páron szépen csinálta a dolgát, ezért rátettem 4 párra az EA-t. Kb egy hét után kaptam egy mail-t, hogy a robotom nagyon leterheli a bróker szerverét, mert túl nagy frekvenciával küldözget tranzakció kérést. Na most, az EA 15 perces charton kereskedik, a kötéslista szerint szó sincs HFT-ről -amit nehezen lehetne MT4-en keresztül eredményesen űzni- nagyon ritkán zár egy órán belül…
Az egy páron futtatott problémamentes éles és a négy páron futtatott problémás éles között annyi a különbség, hogy az utóbbi verziónál gyakrabban iratom ki a számlaegyenleget.
Kérdés: Okozhat egy „Print….” parancs ilyesmit, ha túl gyakran kérem le és íratom ki a számla aktuális egyenlegét? Ha nem, akkor valami ötlet?
A VPS, amin az EA fut nem a brókernél van.
KöszönömSzia kosza!
Látatlanban nehéz így erre bármit mondani, minden esetre önmagában a Print() függvény nem okozhat ilyen problémát. Azt ellenőrizd, hogy az alábbiak közül van-e olyan, amely túlságosan gyakran (pl. tickenként) fut:
OrderSend(), OrderModify, OrderClose, OrderCloseBy.
Ezek azok, amelyek valamilyen parancsot küldenek a brókercég szerverére.
Köszönöm. Ahogy megfejtettem, vagy -ami valószínűbb- lesz még kérdésem, szólok.
Radu, ránéznél erre? Lehet az volt a baj, hogy a különböző párokon elfelejtettem más magic no-t megadni, így szerencsétlen különböző párokat akart mergelni OrderCloseBy()-el? Nem kellett volna zsákszám kapnom a hibaüzeneteket?
Köszönömif(PosTpClose==1&&LoLot()*ShLot()>0) //ha egy páron mindkét irányban van nyitott pozi….
{
if(((OpLoPr()*LoLot()+ OpShPr()*ShLot()))>MinPrPip()) // …és a pipben mért eredmény nagyobb, mint MinPrPip (OpLoPr()*LoLot() jelentése: nyitott long eredmény szorozva a pozimérettel)
{
for(i=0; i<OrdersTotal(); i++) // Order searching cycle
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
{
if(type== OP_BUY)MagicLong=OrderMagicNumber();
if(type== OP_SELL)MagicShort=OrderMagicNumber();
if(MagicLong!=MagicShort)
{
CloseOrders(OP_SELL);
CloseOrders(OP_BUY);
}
if(MagicLong==MagicShort)
{
type=OrderType();
if(type== OP_BUY)LongTicket=OrderTicket();
if(type==OP_SELL)ShortTicket=OrderTicket();RefreshRates();
if(Merge==1) OrderCloseBy(LongTicket,ShortTicket,clCloseBy); // ha mergelés engedélyezett mergelje őket össze
if(Merge!=1)
{
CloseOrders(OP_SELL);
CloseOrders(OP_BUY);
}
}
}
}//for(i=0…..
}
}//if(PosTpClose==1&&LoLot()*ShLot()>0)A kódod felépítése nekem kissé ködös. Első körben mindenképp ajánlom ezt a cikkemet, mert ebben kitérek például a for cikluson belüli lezárás esetén felmerülő problémákra.
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.