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.

Kapcsolódó cikkek