Køb grænsen og ram grænsen på det rigtige tidspunkt. Trade Scheduler - begrænsning af ekspertrådgiverens arbejde i ventende ordreeksperter

I dag vil vi tale om Trade Scheduler-robotten, som har en meget interessant funktion. Når du bruger automatiserede systemer i Forex-handel, har du bemærket, at på bestemte dage i ugen eller tidspunkter er der større sandsynlighed for, at de vil generere tab? For eksempel på den første dag i ugen åbner rådgiveren meget få transaktioner, og de fleste af dem er også urentable. I sådanne tilfælde giver det mening at deaktivere rådgiveren inden lørdag og aktivere den om tirsdagen. Du kan udføre denne enkle handling manuelt, men du kan også nemt glemme at deaktivere eller aktivere rådgiveren på det rigtige tidspunkt.

Løsningen på dette problem (og et par andre) kunne være ved hjælp af robotten Trade Scheduler, som ikke handler selv, men giver dig mulighed for at begrænse arbejdstiden for andre rådgivere i henhold til en tidsplan, udarbejdet ud fra en analyse af disse rådgiveres arbejde.

Inden du foretager justeringer af driftstilstanden, er det nødvendigt at finde ud af, på hvilke tidspunkter den oftest handler i rødt. I dette tilfælde hjælper MyFXbook-tjenesten, som giver detaljerede handelsstatistikker for systemet efter ugedag og time. Den optimale handelsperiode til analyse af systemets drift er 3 måneder. For at udføre det skal du begynde at overvåge tjenesten. Du kan læse om installation af robotten på MyFXbook. Lad os som et eksempel se på resultaterne af ekspertens arbejde, hvis overvågning kan findes ved at klikke på billedet:

Ris. 1. Overvågning af arbejdet i Transient Zones 2.0-rådgiveren på MyFXbook-tjenesten.

Som en mulighed for dem, der endnu ikke har tilstrækkelig handelshistorik for robotten til analyse på en rigtig konto, men samtidig kan den testes, så er du velkommen til at uploade rapporten modtaget fra tjenesten til tjenesten.

Efter at have downloadet og behandlet overvågningen, skal du gå til den avancerede statistik sektion, Daglig fane. Her kan du finde oplysninger om relative mængder efter ugedag. I vores eksempel sker det største antal tabende handler torsdag og fredag, hvilket betyder, at det på disse dage vil være rimeligt at suspendere ekspertrådgiverens arbejde. Årsagen til denne adfærd kan ligge i markedsforholdene, som i disse dage ikke passer til robottens strategi, og dens beregninger er mindre nøjagtige:


Ris. 2. Forholdet mellem rentable og urentable transaktioner fra Transient Zones 2.0-rådgiveren for ugen.

Efter at have analyseret efter dag, kan du analysere effektiviteten af ​​arbejdet efter time. For at gøre dette skal du gå til fanen Time og se, hvornår det relative antal tabende handler er større:


Ris. 3. Relativt antal tabende og rentable handler pr. time.

Konklusion: det ville være klogt at stoppe handelsprocessen torsdag, fredag ​​og for andre dage blokere dets arbejde i de første to timer af den nye dag, og i løbet af dagen i de timer, hvor tabende handler dominerer - især kl. , 13, 14. Det vil sige, lad den arbejde om natten fra kl. 2 til 8 om morgenen og fra kl. 13.00 til 21.00 om dagen. Resultatet af rådgiverens arbejde bør forbedres væsentligt.

Installation og konfiguration af eksperten.

Installation af Trade Scheduler hjælperådgiveren udføres analogt med enhver anden rådgiver; flere detaljer om dette er skrevet ind. Fra nedenstående link kan du downloade arkivet med eksperten:

Hent trade-scheduler.rar (downloads: 139)

Udpak trade-scheduler.rar-arkivet og kopier TradeScheduler v2.3.ex4-ekspertfilen til mappen data_directory\MQL4\Experts\. For at åbne databiblioteket skal du vælge Åbn databibliotek i menuen Filer. Herefter genstarter terminalen, og derefter kan rådgiveren findes i vinduet Navigator - Advisors.

Når du installerer Expert Advisor på et diagram, angives den nødvendige driftstid i indstillingsvinduet efter ugedag og time. Tiden indstilles afhængigt af terminaltiden, som også er tiden. For hver dag er der 3 inputparametre. Den første parameter er ansvarlig for at tænde/slukke robotten på en bestemt dag i ugen, den anden parameter er for starttidspunktet for handel, den tredje er stoptidspunktet. Tiden er angivet i formatet timer: minutter:


Ris. 4. Indtastningsparametre specificeret efter analyse af rådgiverens funktion.

Der er også en ekstra parameter CloseBeforeSwitchOFF i indstillingerne. Når den er indstillet til CloseAll, lukkes alle handler automatisk, før robotten slukkes. Når LukAlleProfitable - kun profitable ordrer lukkes, når Nej - vil transaktioner ikke blive lukket. Slip-parameteren er ansvarlig for den maksimalt tilladte glidning.

Sørg for, at automatisk handel og import af funktioner fra DLL'er er tilladt i terminalen. Én version af rådgiveren er installeret til én terminal.

Konklusion.

Vil forbedre ydeevnen din rådgiver? Prøv metoden til at begrænse dens drift og analyser resultaterne. Hvis statistik viser, at din ekspert "konsekvent taber" på et bestemt tidspunkt af dagen, så er der et mønster i markedet, som han ikke kan bearbejde. Stop handel i denne ugunstige periode og øg rentabiliteten!

Denne rådgiver er ideel til dem, der handler efter niveauer og enhver strategi, der bruger afventende limitordrer. Rådgiveren afgiver ordrer på det rigtige tidspunkt i den rigtige afstand fra den aktuelle pris! I robotindstillingerne kan du indstille stoptab, tage fortjeneste på ordrer samt partiet af hver ordre. Alt er indstillet for hver ordre separat. Du kan kun placere en købsgrænse, en salgsgrænse eller begge ordrer sammen!

Rådgiveren er klar til at arbejde på ethvert handelsinstrument, i enhver Metatrader 4 handelsterminal. Robotten er også klar til at arbejde på flere valutapar på én gang. Det vil sige, at du kan åbne et vilkårligt antal par og installere en rådgiver på dem, hvilket giver hver deres egne magiske tal og tidsindstillinger. Herefter vil hvert par arbejde strengt individuelt. Hvis du stadig arbejder med begrænsede ordrer manuelt, er denne robot noget for dig!

  • BUY_limit- Om der skal angives en købsgrænseordre.
  • Lot_buy_limit- Købsgrænse for partiordre.
  • R_købsgrænse- Afstand fra den aktuelle pris til købsgrænseordren i point.
  • Stop_Loss_buy_limit- Stop loss købsgrænseordrer.
  • Take_Profit_buy_limit- Tag overskudsordrer købsgrænse.
  • SELL_limit- Om der skal angives en salgsgrænseordre.
  • Lot_sell_limit- Salgsgrænse for partiordre.
  • R_sell_limit- Afstand fra den aktuelle pris til salgsgrænseordren i point.
  • Stop_Loss_sell_limit- Stop loss ordrer salgsgrænse.
  • Take_Profit_sell_limit- Tag overskudsordrer salgsgrænse.
  • Skridning- Maksimal glidning i point.
  • Luk_ordrer- Lukning af den anden ordre, når den første åbnes.
  • Tider- Ordrelevetid i minutter.
  • Tid_Start- Afgive ordrer efter tid?
  • Time_Hour- Bestil åbningstid 0-23
  • Tid_Minut- Minut for åbningsordrer 0 - 59. For eksempel time = 5, minut 40, hvilket betyder, at kl. 5.40 vil ordrer blive afgivet baseret på prisen på det pågældende tidspunkt.
  • Ekspert_I- magisk tal til at bestemme dine ordrer og handel med flere valutaer.

Fra artiklen lærer du:

God eftermiddag, kære læsere og gæster på bloggen. I dag vil vi tale om, hvordan der er hjælperådgivere, der afgiver tidsbaserede og afventende ordrer, samt hvordan transaktioner lukkes.

Bedste mægler

En rådgiver, der åbner ordrer hver time eller efter tid, er et værktøj, der hjælper i forskellige handelssituationer. Generelt, så vidt jeg kan se, har interessen for sådanne rådgivere, der udfører lignende handlinger, eksisteret i lang tid. Og i 2006 var der sådanne robotter, og i 2008, baseret på anmodninger, kan du spore interesse for dem, og nu vises anmodninger om at producere sådanne eksperter fortsat. Samtidig hjælper ofte erfarne forhandlere, og ikke kun handlende, men dem, der er engageret i handel, nytilkomne. Alt i alt er det en god tradition. Det er normalt baseret på gensidig udveksling. Nybegynderen kommer med ideer, og den erfarne får ret til at bruge ideen og skaber ekspertkode, som han deler med sin partner.

Når der opstår betingelser for at bruge disse eksperter

Men lad os komme til sagen! Min historie i dag er en historie om en ekspert til at afgive ordrer på det rigtige tidspunkt. Det bruges til en række forskellige formål. For eksempel er der handelssystemer, der er strengt bundet til starten af ​​et stearinlys eller en session. For eksempel er der, og ifølge min beskedne forskning, findes der en vis antydning af sådanne bølger i virkeligheden, men de optræder på forskellige tidsrammer, og der er perioder af forskellig varighed. Du kan for eksempel finde dem på USDCAD på Mn.

Der er stearinlys, der minder meget om hinanden hver måned. I januar har der for eksempel i seks år været en opadgående tendens eller en nedadgående tendens, det er ikke meningen. For at modtage indtægter ved at bruge denne tilgang, skal du placere en ordre i en retning, der er bestemt af forskningsmetoden i begyndelsen af ​​måneden og slette den i slutningen, og gør dette kun i visse måneder af året. Det er netop derfor, eksperten afgiver ordrer efter dato, time og minut.

En ekspert, der giver ordrer på det rigtige tidspunkt, udfører også andre opgaver, for eksempel er det kendt, at der i morgen vil være en tendens i markedet, og handelsidéen foreskriver, at du skal tage stilling til hvert timelys i retning af tendens. Og du skal annullere ordrer i slutningen af ​​handelsdagen.

Således vil ordrer vises i form af et sådant gitter. Du kan se hvordan dette gøres anderledes på siden hvor. Ved udgangen af ​​arbejdsdagen slettes købs-, salgsstop- eller markedsordrer, også på det rigtige tidspunkt.

Hvorfor er det sådan? Fordi jeg har set denne tilgang i følgende modifikation: at placere ordrer på hvert lys med en markedsordre eller også på hvert lys, men med køb og salg stop i modsatte retninger. I det andet tilfælde ved du måske ikke engang i hvilken retning markedet vil bevæge sig, men fanger blot bevægelsen, som om du bruger et sommerfuglenet. Også, når du placerer køb og salg stopordrer i begge retninger, måske indtil slutningen af ​​dagen, vil en af ​​dem ikke åbne og forblive hængende.

Hent

Så det bliver klart, at der i dag er tre typer hjælpeeksperter i denne sammenhæng.

  1. Den første type er en ekspert, der placerer ordrer på markedet under hensyntagen til bestemte timer og minutter,
  2. Den anden type er en ekspert i afventende ordrer efter timer og minutter.
  3. Den tredje type kan implementeres inden for de to første eller være et separat program. Dette er præcis tilfældet i vores eksempel.

Markedsordreekspert

Når du ved, at optrenden starter kl. 23:50, så vil prisen helt sikkert passere 60 pips, med et stop loss på 30 pips, og du har en ekspert, der vil følge stop-losset, så du skal bruge en ordre. Samtidig vil du ikke være langt væk, så lyden, der giver besked om åbningen, vil være praktisk. Under sådanne forhold har du brug for den første type ekspert. I dette tilfælde er dette e-OpenByTime-eksperten. Denne ekspert, som kan downloades ved hjælp af sociale knapper, har følgende parametre:

  • TimeTrade – her indstiller du det præcise tidspunkt, hvor ordren skal åbnes. Dataformat tt:mm.
  • Varighed – den periode i sekunder, hvor eksperten vil forsøge at afgive en ordre.
  • Sælg – her skal du angive ordretypen sand – det betyder, at der åbnes en ordre på markedet for at sælge aktivet. Værdien falsk svarer til en købsordre.
  • Partier – denne mulighed vil begrænse dit handelsparti til en specificeret værdi.
  • SopLoss – stop loss er designet til firecifrede mæglere, så for at bestemme størrelsen på 30 point skal du indstille værdien til 300
  • TakeProfit - det er den samme historie med take profit.
  • MagicNumber – Jeg tror, ​​at alt er klart her.
  • UseSound – derefter kommer lydindstillingerne.
  • NameFileSound – her vælger vi en lydfil.
  • Af de resterende indstillinger kan kun MaketWatch rejse spørgsmål. Det viser sig, at denne indstilling er nødvendig for at sikre, at handelsanmodninger sendes i henhold til Market Watch-reglerne, som nogle mæglere kræver.

Ekspert for ventende ordrer

Den anden type eksperter, der arbejder med at åbne afventende ordrer, er eksperter til forskellige bokshandelssystemer. Lignende

Denne gang vil jeg beskrive en ekspert, så at sige, en hjælpemand, som uden hensyntagen til trends og andre tegn på diagrammet vil åbne to buy-, sellstop-handler i begge retninger.

Vi taler om 37_Exp-TimeOpenBuy-eksperten. Opsætningen er ret enkel.

  • BuyStopOpen og SellStopOpen - begge i dette tilfælde er defineret som sande.
  • Afstand – bestemmer, i hvilken afstand fra den aktuelle pris disse ordrer vil blive afgivet. Bemærk venligst, at værdien her og i næste linje er beregnet for en firecifret mægler, så for at indstille afstanden skal du bruge et tal, for eksempel 30 point og tilføje endnu et 0 til sidst.
  • TPBuyStop, SLBuyStop, TPSellStop, SLSellStop – giver dig mulighed for at bestemme afstanden for at tage profit og stop tab for hver ordre. (Her tilføjer vi også et nul til tallet i slutningen.)
  • CloseAfterOpen – giver dig mulighed for at slette en aftale, der er tilbage, efter at en af ​​købs- og salgsstop-ordrerne er blevet udløst.
  • Slippage er en indstilling, der efter min erfaring skal indstilles til en anden værdi end nul, for at ordrer kan afgives. Dette er den maksimale slipværdi.
  • CloseIfNotOpen – blev udtænkt som en funktion, der sletter alle mislykkede købs- og salgsstop på et nyt tidspunkt. Men uanset hvor meget jeg prøvede at bruge denne operation, kom der intet ud af det.
  • De resterende muligheder er nødvendige for at bestemme tidspunktet for indtræden på markedet og forlade det.

Ekspertfjerner af aflejringer

Endelig, den tredje rådgiver, som ved hjælp af den mql4-kode, jeg kompilerede, udfører fjernelse af buy-, i tide, mere præcist end dem alle. Generelt vil du nu have et komplet sæt af rådgivere til at placere købs-, salgsstop-ordrer og på markedet og en ekspert, der vil lukke ordrer til tiden. For at gøre dette, før cyklussen, som simpelthen i virkeligheden lukker købs-, salgsstopordrer, eller det ville være mere korrekt at sige: sletter dem, skal du udføre en kontrol, hvis (TimeCurrent()>=Sorttid). I dette tilfælde tildeles variablen det tidspunkt, hvorefter ordrer slettes.

konklusioner

I dag har vi stiftet bekendtskab med et meget nyttigt sæt hjælperådgivere, der kan bruges under forskellige markedsforhold. For at bruge dem skal du bruge en hurtig opsætning og en form for markedsprognose. Som et resultat af deres brug vil du være i stand til at organisere helt uafhængige og næsten helt automatiske ind- og udgange. Jeg vil endda sige, at alt vil ske automatisk, men kun inden for rammerne af et par handlinger, så skal indstillingerne for eksperterne ændres. Dette er dog allerede en god hjælp for dem, der ikke har tid til at sidde foran en skærm uden begrænsninger. Det er alt, kære venner. Jeg håber du fandt denne side interessant.

(2 vurderinger, gennemsnit: 5,00 ud af 5)

Hvis dit handelssystem ikke er baseret på nyhedsspring, så kan det være meget nyttigt for din økonomiske og mentale sundhed at stoppe rådgiverens arbejde, før vigtige nyheder frigives. Og efter at volatiliteten har lagt sig, tænd den igen efter et par timer. Det er godt, hvis du har adgang til en fungerende terminal ved hånden. Og hvis ikke? Det er her, automatisering af sådanne aktiviteter kommer til nytte.

En af mulighederne for at løse vores problem er at kompilere en fil med en tidsplan over vigtige begivenheder. Læser denne fil af vores ekspert og bestemmer, hvornår du kan arbejde, og hvornår ikke. MQL4-lærebogen giver et eksempel på at arbejde med en CSV-tekstfil, og vi vil tage udgangspunkt i den og samtidig slippe af med et par fejl, som forfatterne har begået utilsigtet eller for at teste vores opmærksomhed (som de selv advarer om - vi skal ikke stole blindt på nogen, fejl sker altid).

Så lad os lave en tidsplan over vigtige begivenheder i næste uge i følgende format:
Hændelsesdato og -tidspunkt; instrument; begivenhedsbeskrivelse

2016.04.01 14:00;USD;ISM erhvervsaktivitetsindeks i fremstillingssektoren 2016.04.01 14:00;USD;Indeks for gradvis acceleration af inflation fra ISM 2016.04.04 09:00;EUR;Producentprisindeks (m/m) ) 2016.04.04 09:00;EUR;Producer Price Index (YoY) 2016.04.05 04:30;AUD;Beslutning fra Reserve Bank of Australia om rentesatsen 2016.04.05 04:30;AUD;Medfølgende erklæring fra reserven Bank of Australia 2016.04.06 07: 00;EUR;ECB-møde 2016.04.06 18:00;USD;Referat fra mødet i US Federal Open Market Committee 2016.04.07 11:30;EUR;Information om ECB-mødet om monetære politik

Lad os skrive den til filen ht-news.csv og placere den i den nødvendige mappe \MQL4\Files\ht-news.csv, hvorfra vores rådgiver kan læse den.

Lad os først indstille eksterne variabler til konfiguration; kommentarer forklarer deres formål:

Extern string startNewsEvent="Begrænsning af arbejde med nyheder"; input bool StopOnNewsEvent=sand; //Aktiver NewsEventFileName="ht-news.csv"; //Fil med tidsplaninput uint LoadNewsEventTimerInDay=7;//Hvor ofte i dage skal du genindlæse filinput uint StopPriorEventHours=2; //Stop X timer før hændelsesinput uint StartAfterEventHours=3; //Start X timer efter begivenheden ekstern streng stopNewsEvent="----------------";

Følgende struktur hjælper os med at få adgang til beskrivelsen af ​​den begivenhed, der behandles:

Struct NEWS_EVENT (datetime EventTime; //hændelsestidsstreng Instrument; //hændelsesinstrumentstreng EventComment; //hændelseskommentar);

Brugerdefineret funktion til at læse information fra en fil

Bool LoadNews() ( int handle; // File descriptor string instrument, // Navn på hændelsesvalutaen firstInstrument,secondInstrument, // 1. og 2. del af navnet på det aktuelle par hændelseComment, // Tekst af hændelsesbeskrivelsen stringDateTime; // Streng udtryk for dato og klokkeslæt for begivenheden datetime eventDateTime; // Dato og klokkeslæt for begivenheden i datetime format handle=FileOpen(NewsEventFileName,FILE_CSV|FILE_READ,";");// Åbning af en fil if(handle<0) // Неудача при открытии файла { int lastError=GetLastError(); if(lastError==4103) // Если файла не существует, сообщим Alert("Нет файла с именем ",NewsEventFileName); else // При любой другой ошибке Alert("Ошибка при открытии файла ",NewsEventFileName," :",lastError); PlaySound("Bzrrr.wav"); // Громко ругнемся и вернем фалсе return false; } int cnt=0; while(FileIsEnding(handle)==false) { stringDateTime =FileReadString(handle);// Дата и время события instrument=FileReadString(handle); //Инструмент eventComment =FileReadString(handle);// Текст описания события, может не быть eventDateTime =StrToTime(stringDateTime); // Преобразование типа данных firstInstrument=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа secondInstrument=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа if(StringCompare(instrument,firstInstrument,false)!=0 && StringCompare(instrument,secondInstrument,false)!=0) { continue; //не наши инструменты } cnt++; ArrayResize(NewsEvent,cnt,1000); //изменяем размер массива с запасом для ускорения ArrayResize(NewsEventTime,cnt,1000); NewsEvent.EventTime= eventDateTime; NewsEvent.Instrument=instrument; NewsEvent.EventComment=eventComment; NewsEventTime=eventDateTime; //удобнее искать в одномерном массиве } FileClose(handle); // Закрываем файл ArraySort(NewsEventTime,WHOLE_ARRAY,0,MODE_ASCEND); //сортируем массив для последующего поиска return true; }

Vi søger efter den nødvendige tid i NewsEventTime-arrayet, og hvis tiden findes, får vi dens beskrivelse af deres NewsEvent-struktur-array

String GetEventInfo(datetime date) ( for(int i=0;i

Hjælpefunktion til at bestemme, om den aktuelle tid falder inden for inaktiv tid

//tjek om vi skal deaktivere nyhedsrådgiveren True - work False - rest bool CheckEnableNewsWork() (if (ArraySize(NewsEventTime)==0) returnerer true; //af en eller anden grund var arrayet med tidsplanen tom, hvilket betyder vi arbejder //nu skal vi finde den nærmeste dato i NewsEventTime, før hvilken vi skal stoppe arbejdet for StopPriorEventHours timer datetime timeCurrent =TimeCurrent(); datetime timeStopWork=timeCurrent+StopPriorEventHours*3600; //Hvis der er et tidspunkt i NewsEventTime det er mindre end timeStopWork, så holder vi op med at arbejde int dateindex= ArrayBsearch(NewsEventTime,timeStopWork,WHOLE_ARRAY,0,MODE_ASCEND); datetime foundEventTime=NewsEventTime; timeStopWork=foundEventTime-StopPriorEventHours //36beregn klokkeslæt den fundne dato0; timeStartWork=fundetEventTime+StartAfterEventHours*3600; //dette er sluttidspunktet for hvile / /lad os nu tjekke, om vi nu er timeCurrent mellem timeStopWork og timeStartWork. Hvis ja, så arbejder vi ikke hvis (timeCurrent>=timeStopWork && timeCurrent<=timeStartWork) { DrawLabel("EnableNewsWork","Не работаем, новость: "+GetEventInfo(foundEventTime)+"",5,80,Red); return false; } else { DrawLabel("EnableNewsWork","Нормальная работа, новостей нет",5,80,Green); return true; } }

For periodisk at læse fra en fil med en tidsplan, har vi brug for en timer, der kører, for eksempel en gang om ugen, som konfigureret

//Tjek tilstedeværelsen af ​​en nyhedsfil ved hjælp af timerens void OnTimer() ( if (StopOnNewsEvent) ( LoadNews(); //læs filen ) )

Når du initialiserer rådgiveren, skal du starte timeren og læse nyhederne for første gang

OnInit() .... if (StopOnNewsEvent) //Hvis indstillet, indlæs filen med nyhederne (bool tm=EventSetTimer(LoadNewsEventTimerInDay*86400); //start timeren for at indlæse filen med tidsplanen, hvis (!tm) Alert("EventSetTimer error :",GetLastError()); OnTimer();//Første start med det samme )

Ved hvert flueben tjekker vi, om vi kan åbne stillinger. Det burde i øvrigt ikke påvirke slæb.

OnTick() .... bool enableNewsWork=true; //du kan arbejde på nyhedsbegivenheder if (StopOnNewsEvent) ( enableNewsWork=CheckEnableNewsWork(); //Hvis der er en nyhedsgrænse, så tjek tiden) if (HaveMoney && enableNewsWork) Traiding(Pairs); //tjek betingelser og åben handel på et par

Det er alt. Desværre har jeg ikke testet denne kode på en rigtig konto endnu, da jeg skrev den i weekenden, emulerede fluebenene med en timer og ændrede det aktuelle tidspunkt, som stopper i weekenden, manuelt. Men i næste uge vil jeg se i det virkelige liv, i den nye version "Forex Grail 1.11", hvor jeg indlejrede ovenstående kode.

I fremtiden skal du muligvis lave et praktisk hjælpeprogram til at generere filen ht-news.csv, for eksempel i samme