Hiba 146 (- kereskedelmi forgalom van elfoglalva -), és hogyan kell kezelni, hogy - cikkek MQL4
1. A „kereskedelmi flow” a terminál MetaTrader 4
Segítség az MetaEditor:
A kereskedelmi szakértők és szkriptek, csak egy szál fut keretében a program szakmai (automatizált kereskedési környezetben a szakértők és szkriptek). Ezért, ha a kontextus forgalmas kereskedelmi forgalom egy szakértő, egy másik szakértő vagy script nem ebben a pillanatban hívás kereskedelmi funkciókat egy hiba miatt 146 (ERR_TRADE_CONTEXT_BUSY)
2. IsTradeAllowed funkció ()
A legegyszerűbb módja annak megállapítására, hogy a kereskedelmi összefüggésben ingyenes - használja IsTradeAllowed () függvényt.
Segítség az MetaEditor:
TRUE értéket ad vissza, ha a szakértő hagyjuk a kereskedelem és az áramlás a kereskedés nem lakott, máskülönben hamis
Ie lehet próbálni a kereskedelem csak akkor, ha a függvény IsTradeAllowed () TRUE.
Ellenőrzéseket kell végezni közvetlenül megelőző kereskedési.
Helytelen használata funkciók:
Ebben a példában a kereskedelemben van jelölve elején a start () függvény. Ez egy rossz döntés - a fordított idő szakértői számítások (annak szükségességét, hogy a piacra, a szintek Stop Loss és Take Profit, sok méret, stb), a kereskedelmi forgalomra lehet használni egy másik szakértő. Ebben az esetben arra törekszik, hogy a pozíció megnyitásához nem fog sikerülni.
Egy példa a helyes használata a funkciók:
Itt van jelölve, közvetlenül a nyitó helyzetbe, és annak a valószínűsége, hogy egy másik szakértő „közbe” a két akciók jóval kisebb (de még mindig ott van. Ez lesz szó később).
Az eljárás két fő hátránya van:
- Továbbra is a lehetősége, hogy a szakértők ellenőrizni fogja állapotát egyszerre, és megkapta a „zöld utat” lesz, ugyanakkor megpróbálja a kereskedelem
- Ha a teszt sikertelen, a szakértő megpróbálja a kereskedelem csak a következő kullancs. Az ilyen késedelem nem indokolt.
A második problémát meg lehet oldani egyszerűen elég - csak ki kell „várni”, amíg a kereskedelmi összefüggésben ingyenes. Ezután a szakértő indul kereskedés után azonnal a célba egy másik szakértő.
Ez a következőképpen néz ki:
A jelenlegi végrehajtására, ismét van a problémás területeket:- Egyrészt, mert IsTradeAllowed () függvény felelős nem csak az állam a kereskedelmi forgalom, hanem a „tick”, a felbontása egy szakértő a kereskedelem, a szakértő „lefagy” végtelen ciklusba, és megáll csak akkor, ha kézzel eltávolítjuk a chart
- másodszor, ha a szakértő meg kell várni, amíg a kereskedelmi forgalom legalább egy második, az árak is változnak, és a kereskedelem őket nem lehet - szükség van az adatok frissítésére, és újraszámolja a nyitó szintek Stop Loss és Take Profit jövőbeni pozíciók.
Kód, figyelembe véve a korrekciók fog kinézni:
Ebben a példában egészül ki:- frissített piaci információk (RefreshRates ()) és az azt követő központi SL és TP szintek
- a maximális várakozási idő MaxWaiting_sec, amely felett a szakértő leáll
Mint ilyen, a kód már kihasználják a szakértők.
Az utolsó érintés - „kiolvasztott” mindent megnézni egy külön funkció. Ez elősegíti annak integrálása a szakértők, és könnyebb használni.
szakértő sablon, amely a funkció:
Felhívni néhány következtetéseket:
IsTradeAllowed () függvény használata egyszerű, és ideális való hozzáférés korlátozását a kereskedési áramlás során egyidejű működését két vagy három szakértő. Hiányosságai miatt, amelyek jelen benne, annak használata a nagyszámú szakértő nem garantálja a hiánya hibák, és 146 okozhatnak „lefagy” a szakértő volt tiltva, ha a checkbox „Hagyjuk a szakértő a kereskedelmet.”
Ezért nézzük más módon megoldani ezt a problémát - használata a globális változóban „szemafor”.
3. A globális változók ügyfélterminálnak
Először egy kicsit a fogalmakat.
Ügyfélterminál globális változók - a változók, amelyekhez való hozzáférés egyáltalán Expert Advisors, scriptek és indikátorok. Ie globális változó által létrehozott egy szakértő, lehet használni más szakemberek (ebben az esetben a beléptető).
Együttműködik a globális változók MMS 4 több feladatot is ellát:
- GlobalVariableCheck () - egy globális változó, hogy ellenőrizze, ha van
- GlobalVariableDel () - eltávolítása a globális változó
- GlobalVariableGet () - hogy az érték egy globális változó
- GlobalVariableSet () - létrehozására és módosítására a globális változó
- GlobalVariableSetOnCondition () - a változó egy globális változó értékét (a felhasználó által megadott) a másikra. Ie Ellentétben GlobalVariableSet (), hogy az új érték lesz beállítva csak bizonyos korábbi értéket. Ez az a funkció, és a legfontosabb, hogy hozzon létre egy szemafor.
- GlobalVariablesDeleteAll () - törli az összes globális változók (nem tudom, ki lehet szükség ennek :)
Miért használja GlobalVariableSetOnCondition () függvény helyett kombinációja GlobalVariableGet () és GlobalVariableSet ()? Igen, minden ugyanezen okokból - között, hogy a 2 funkció némi időt vesz igénybe. És egy másik szakértő van esélye, hogy „éket” a váltás folyamatát a szemafor. Azt is tudja, nem engedi, hogy ez megtörténjen.
4. Az alapötlet a szemafor
A szakértő, aki azt akarja, hogy a kereskedelem ellenőrizze az állapotát a szemafor. Ha a szemafor „piros lámpát” (global variable = 1), akkor már értékesíti egy másik szakértő, és meg kell várni. Ha azonban a „zöld utat” (global variable = 0), akkor azonnal elkezd kereskedés (ne felejtsük el beállítani a „piros lámpát”, hogy más szakértők).
Összesen, létre kell hoznunk két funkció - az egyik, hogy állítsa be a „piros lámpát”, és egy beállítás a „zöld lámpát”. A feladat első pillantásra egyszerű. De ne következtetéseket levonni, hanem inkább próbálja megfogalmazni a munkafolyamat minden funkciót (nevezzük őket TradeIsBusy () és TradeIsNotBusy ()), és alkalmazza őket.
5. TradeIsBusy funkció ()
Mint már említettük, a fő funkciója a feladat fog várni, amíg a „zöld utat”, és a felvétel a „piros lámpát”. Ezen kívül ellenőrizni kell, hogy van egy globális változó, és hozza létre, ha az nem létezik. Ez a teszt több logikai (és hatékonyabb), hogy az init () függvény szakértő. De akkor nem lenne a valószínűsége, hogy a felhasználó törli, és az összes futó idején a szakértők nem lesz képes a kereskedelem. Ezért fogunk küldeni, hogy a testület a funkció jön létre.
Mindezen intézkedések kell kísérnie megjelenő információk és feldolgozási hibák észlelése dolgozik egy globális változót. Továbbá ne felejtsük el, mintegy száz um „lebeg” - a kilépési munka korlátozni kell.
Ez az, amit meg kell tenni, hogy:
Úgy tűnik, hogy minden világos:
- ellenőrzi a globális változó létezik, és ha nem, a teremtés
- megpróbálja módosítani az értékét egy globális változó 0-1 csak akkor működik, ha értéke = 0.
Funkció működhet maximális MaxWaiting_sec másodperc, és nem zavarja a eltávolítása egy szakértő a diagramon.
Információ az összes előforduló hibák jelennek meg a naplóban.
6. TradeIsNotBusy funkció ()
TradeIsNotBusy funkciót teljesít az inverz probléma - többek között a „zöld utat”.
Ez nincs korlátozás a munkaidő és nem lehet megállítani, a felhasználó által. A motiváció meglehetősen egyszerű - ha nem tartalmazza a „zöld utat”, nem szakértő nem lenne képes a kereskedelem.
Természetesen a visszatérési kódok nem rendelkezik - az eredmény csak akkor lehet sikeres.
Itt van, hogyan néz ki:
7. integrációja szakértők és használata
Most van 3 lehetőség hozzáférést korlátozó kereskedelmi forgalom. Annak érdekében, hogy megkönnyítse beilleszkedésüket a szakértő létrehozhat TradeContext.mq4 fájlt, és tartalmazza azt #include direktíva (csatolt fájl).
szakértő sablon segítségével TradeIsBusy () és TradeIsNotBusy ():
A használat TradeIsBusy () és TradeIsNotBusy () Lehet, hogy csak egy probléma - ha miután a kereskedelmi forgalom van elfoglalva, szakértői hagyni a felépítést, a változó TradeIsBusy egyenlő marad 1. Más szakértők akkor nem lesz képes a kereskedelem.
Ez megoldotta a problémát egyszerűen - nem kell eltávolítani egy szakértő a chart, ha kereskedik;)
Az is lehetséges, hogy a változó nem nullázódik, amikor TradeIsBusy kritikus terminál leállás. Ebben az esetben, ez segít használni TradeIsNotBusy () függvény a init () függvény szakértő.
Ja, és bármikor a változó értékét manuálisan módosítható - F3 gombot a terminál (ez egy nem dokumentált funkció tiltani minden kereskedelmi szakértők;)
Miért ilyen nagy betűkkel? Amennyire én tudom, a hiba 146 generál egy terminál, a kérelmet nem kell küldeni a bróker. De miért is kellene fogadni, ha minden olyan mechanizmust, hogy ellenőrizze a kereskedelmi forgalom?
- A font - ez az ügyvezetőt, mert a helyén néha működik Chrome (Google Chrome) - zoom ablakban átveszi a nagy méretet. - tettem hozzá egy állapotfelméréssel, hogy az áramlás ingyenes munkások és parasztok, gond nélkül, de nagyon kevés az esélye, hogy a két tanácsadó különböző devizapárok szembe kell néznie ugyanabban a pillanatban. Ha egyikük leállítjuk a terminál (nem a közvetítő), akkor elfogadható. Most kereskedés Demo (6 tanácsosok úgy tűnik 7 foglalkozik + megrendelések változik) - a nap hozzáadása után a vizsgálatot, amíg nincs hiba. Köszönjük!
Zdravstvuyte.Pomogite megértését kérjük az oka a hiba. A VPS van telepítve egy terminál egy tanácsadó. Hands nem működik, a tanácsadó működik magát. Ha vásárolt VPS, és helyezze vissza a terminál (mivel a frissítés volt Forex4you terminálok) kezdtek megjelenni rendkívül gyakori hibákat. Megkérdeztem Forex4you, elküldte a VPS. Fellebbezést nyújtott be a VPS, azok nem ismerik a problémát, és elküldte ide, ez sayt.Chto okozhat ilyen hibát, VPS vagy a terminál? Kérem, segítsen megérteni a problémát, mint én, mert ezek a hibák veszteségeket. 1 oshibka- TradeDispatcher: kereskedelmi összefüggésben van elfoglalva 2 oshibka- nem tudok belépni kapcsolat állapotát a kapcsolat, alsó, jobb, én és nem segít.