Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
cjdqptjikm7d0vxa45c47npzj18pzz_maemwznfmvcg5i
//+------------------------------------------------------------------+
//| Ñàìîîáó÷àþùèéñÿ ÝÊÑÏÅÐÒ.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
// <Ðàáîòà ñ ïðîãðàììîé.Îáó÷åíèå.>
// Ïðè çàäàííîì íàáîðå âíåøíèõ (âõîäíûõ) ïàðàìåòðîâ îáó÷åíèå ïðîãðàììû
// ìîæíî ïðîâîäèòü äâóìÿ ñïîñîáàìè:
// À) Â ðåçóëüòàòå ïðåäâàðèòåëüíîãî òåñòèðîâàíèÿ íà Òåñòåðå Ñòðàòåãèé.
// Äëÿ ýòîãî íóæíî ïðåäâàðèòåëüíî çàãðóçèòü äîñòàòî÷íûé îáúåì èñòîðèè,
// õîòÿ áû çà ãîä, ÷òî ìîæíî ñäåëàòü, îòêðûâ ãðàôèê íóæíîé âàëþòíîé
// ïàðû è óäåðæèâàÿ êëàâèøó Home. Çàòåì îòêðûâàåì ìåíþ Âèä/Òåñòåð
// Ñòðàòåãèé, è çàïóñêàåì òåñò ñ âûáîðîì òî÷íîé ìîäåëè òåñòèðîâàíèÿ
// ïî âñåì òèêàì (ïîäðîáíåå î ðàáîòå ñ Òåñòåðîì ñì. âñòðîåííóþ
// èíñòðóêöèþ ïëàòôîðìû ÌÒ4).
// Â ïðîöåññå òåñòà ôàéëû ñòàòèñòèêè ñäåëîê ñîçäàþòñÿ Òåñòåðîì è
// çàïèñûâàþòñÿ â ïàïêó Tester/files. Äëÿ ðàáîòû ñ ðåàëüíûì ñ÷åòîì
// èõ äîñòàòî÷íî ïåðåíåñòè â ïàïêó Experts/files.
// Á) Îáó÷åíèå ìîæåò áûòü òàêæå ïðîâåäåíî ïðè çàïóñêå ïðîãðàììû â
// ðåæèìå ðåàëüíîãî âðåìåíè.  ýòîì ñëó÷àå ôàéëû ñòàòèñòèêè ñäåëîê
// ñîçäàþòñÿ ñðàçó â ïàïêå Experts/files. Íàêîïëåíèå ñòàòèñòèêè
// ôèêòèâíûõ ñäåëîê â ðåàëüíîì âðåìåíè ïðîèñõîäèò íå áûñòðî. Ìîæåò
// ïîòðåáîâàòüñÿ íåäåëÿ èëè áîëüøå, ïðåæäå ÷åì ñîâåòíèê ñîáåðåò
// äîñòàòî÷íûé îáúåì èíôîðìàöèè è îòêðîåò ïåðâóþ ïîçèöèþ.  òî æå
// âðåìÿ, ôàéëû ñòàòèñòèêè, áûñòðî ñîçäàâàåìûå Òåñòåðîì Ñòðàòåãèé,
// íå âïîëíå óäîâëåòâîðèòåëüíû, òàê êàê îíè íåñêîëüêî èñêàæåíû
// ïîãðåøíîñòÿìè, âîçíèêàþùèìè ïðè ìîäåëèðîâàíèè Òåñòåðîì äâèæåíèÿ
// öåíû âíóòðè áàðà. Ýòîãî äîñòàòî÷íî äëÿ äåìîíñòðàöèè
// ðàáîòîñïîñîáíîñòè àëãîðèòìà è ïðåçåíòàöèè ïðîãðàììû, îäíàêî çàïóñê
// ñîâåòíèêà íà ðåàëüíîì ñ÷åòå ñ ýòèìè ôàéëàìè ñòàòèñòèêè ñîïðÿæåí ñ
// îïðåäåëåííûì ðèñêîì. Ïîýòîìó îïòèìàëüíûì ñïîñîáîì îáó÷åíèÿ
// ïðåäñòàâëÿåòñÿ ñëåäóþùèé. Ôàéëû îáó÷åíèÿ ñîçäàííûå Òåñòåðîì ïîñëå
// òåñòèðîâàíèÿ íà èñòîðè÷åñêèõ äàííûõ, ñëåäóåò ðàññìàòðèâàòü êàê
// ïåðâîå ïðèáëèæåíèå. Èõ ñëåäóåò ïåðåíåñòè â ïàïêó Experts/files
// è çàïóñòèòü ñîâåòíèêà â ðåæèìå ðåàëüíîãî âðåìåíè íà äåìî-ñ÷åòå.
// Ñîâåòíèê ñðàçó ìîæåò ñîâåðøàòü ñäåëêè. Îäíàêî îáíîâëåííûå ôàéëû
// ñòàòèñòèêè ñäåëîê ïîÿâÿòñÿ ñïóñòÿ íåêîòîðîå âðåìÿ (îêîëî íåäåëè-
// äëÿ ïàðàìåòðîâ ïðèíÿòûõ ïî óìîë÷àíèþ). Ïðîùå ãîâîðÿ, ïîñëå ïåðåõîäà
// ñ Òåñòåðà íà ðåàëüíûé ñ÷åò ñîâåòíèêó íåîáõîäèìî ðàñòîðãîâàòüñÿ.
// Çà ýòî âðåìÿ îí êîððåêòèðóåò ôàéëû ñòàòèñòèêè, ñîçäàííûå ðàíåå
// Òåñòåðîì.
// <Ïåðåîáó÷åíèå. Ïàðàìåòð ReadHistory.>
// Åñëè ïðîãðàììà áûëà ðàíåå õîòÿ áû ðàç ïðîòåñòèðîâàíà íà äàííîì
// ñèìâîëå, îíà ñ÷èòàåòñÿ îáó÷åííîé ðàáîòàòü íà ýòîì ñèìâîëå, à
// ïàïêà Tester/files ñîäåðæèò ôàéëû ñòàòèñòèêè. Ïðè ïîâòîðíîì
// çàïóñêå íà Òåñòåðå ïðîãðàììà ïî óìîë÷àíèþ ñ÷èòûâàåò èíôîðìàöèþ
// èç ôàéëîâ ñòàòèñòèêè. Ïîýòîìó ïðè èçìåíåíèè çíà÷åíèé êàêèõ ëèáî
// âõîäíûõ ïàðàìåòðîâ íåîáõîäèìî çàïðåòèòü ÷òåíèå äàííûõ èç ôàéëîâ
// ñòàòèñòèêè.  ïðîòèâíîì ñëó÷àå âîçíèêíåò íåñîîòâåòñòâèå ñòàðûõ
// ðåçóëüòàòîâ îáó÷åíèÿ è íîâûõ âõîäíûõ ïàðàìåòðîâ, â ðåçóëüòàòå
// ÷åãî ïðîãðàììà ìîæåò äàæå ïðîäåìîíñòðèðîâàòü îòðèöàòåëüíûé
// ðåçóëüòàò. Çà ïåðåîáó÷åíèå ïðîãðàììû îòâå÷àåò ïàðàìåòð
// ReadHistory. Åñëè ïðè çàïóñêå ïðîãðàììû ReadHistory=0, ïðîãðàììà
// ñòèðàåò ïðåæíèé ôàéë ñòàòèñòèêè è ïèøåò íà åãî ìåñòî íîâûé,
// îòâå÷àþùèé íîâûì âõîäíûì ïàðàìåòðàì. Åñëè ReadHistory=1,
// ïðîãðàììà ñ÷èòûâàåò ðåçóëüòàòû ïðåæíåãî îáó÷åíèÿ è èñïîëüçóåò
// èõ â ðàáîòå. Eñëè ReadHistory=1, à ôàéëà ñòàòèñòèêè íå
// îáíàðóæåíî, ïðîãðàììà ïðîïèñûâàåò â æóðíàë îøèáêó ÷òåíèÿ ôàéëà
// (ýòî íîðìàëüíî), ñîçäàåò íóæíûå ôàéëû è çàïèñûâàåò â íèõ
// èíôîðìàöèþ àíàëîãè÷íî çàïóñêó c âûáîðîì ReadHistory=0.
// <Ïðî÷èå ïàðàìåòðû.>
// - Probab òðåáóåìàÿ âåðîÿòíîñòü âûèãðûøà, íà îñíîâàíèè
// ñòàòèñòè÷åñêèõ äàííûõ. ×åì áëèæå Probab ê åäèíèöå, òåì áîëåå
// âåðîÿòíî äîñòèæåíèå âûèãðûøà â ñëó÷àå îòêðûòèÿ ïîçèöèè. Îäíàêî
// ðûíî÷íûå ñèòóàöèè ñ ãàðàíòèðîâàííûì âûèãðûøåì ðåàëèçóþòñÿ ðåäêî.
// Ïîýòîìó äëÿ ôàêòè÷åñêîãî äîñòèæåíèÿ âûèãðûøà ïîëüçîâàòåëü îáÿçàí
// ðàçðåøèòü îïðåäåëåííûé ðèñê. Òàêèì îáðàçîì, ñîâåòíèê íå ÿâëÿåòñÿ
// ìàøèíîé ïî ñòàáèëüíîìó ïðîèçâîäñòâó äåíåã. Ïîëüçîâàòåëü
// îñîçíàåò íàëè÷èå èíâåñòèöèîííîãî ðèñêà è ñàìîñòîÿòåëüíî íàçíà÷àåò
// âåðîÿòíîñòü ïðîèãðûøà. Óêàçàííàÿ âåðîÿòíîñòü ïðîèãðûøà ðàâíà íóëþ
// ïðè âûáîðå Probab=1, â ýòîì ñëó÷àå ñîâåòíèê íèêîãäà íå îòêðîåò
// ïîçèöèþ;
// - forg ñêîðîñòü çàáûâàíèÿ ðåçóëüòàòîâ îáó÷åíèÿ. Îò 1 (çàáûâàíèÿ
// íåò) äî 1.1 (ñèëüíîå çàáûâàíèå). Ïàðàìåòð ïîëåçåí, åñëè íåîáõîäèìî
// ïðèäàòü ïîñëåäíèì ñäåëêàì áîëüøèé ñòàòèñòè÷åñêèé âåñ. Èçâåñòíî,
// ÷òî ðûíîê ñî âðåìåíåì èçìåíÿåòñÿ. Ýòî âûðàæàåòñÿ, ê ïðèìåðó â òîì,
// ÷òî ðûíî÷íûå ñèòóàöèè, êîòîðûå â ïðîøëîì ãîäó òðàäèöèîííî áûëè
// áëàãîïðèÿòíûìè äëÿ ïîçèöèè Buy, â íîâîì ãîäó ìîãóò îêàçàòüñÿ
// áëàãîïðèÿòíûìè äëÿ ïîçèöèè Sell. Åñëè ïîñòàâëåíî forg=1,
// ïðîãðàììà ñ÷èòàåò âïîëíå ðàâíîïðàâíûìè ðûíî÷íûå ñèòóàöèè,
// ðåàëèçîâàííûå â ïðîøëîì è â íîâîì ãîäó. Ñ ó÷åòîì òðåáóåìîé
// âåðîÿòíîñòè ïîëîæèòåëüíîãî çàêðûòèÿ (Probab) ýòî ïðèâîäèò ê òîìó,
// ÷òî ïðîãðàììà èùåò äîëãîñðî÷íûå ñòàáèëüíûå òðåíäû.  òî æå âðåìÿ,
// îíà èãíîðèðóåò ÿâíûå ïðèçíàêè ïîÿâëåíèÿ íîâûõ òðåíäîâ. Íàïðîòèâ,
// ïðè âûáîðå forg>1 ïðîãðàììà, íàðÿäó ñ äîëãîñðî÷íûìè òðåíäàìè,
// êîòîðûå äåéñòâîâàëè íà âñåé äîñòóïíîé èñòîðèè, îòñëåæèâàåò òàêæå
// ïîÿâëåíèå íîâûõ òðåíäîâ. Ïðè ïîÿâëåíèè î÷åðåäíîé ðûíî÷íîé ñèòóàöèè
// ñòàòèñòè÷åñêèé âåñ ïðåäûäóùèõ àíàëîãè÷íûõ ðûíî÷íûõ ñèòóàöèè
// ïîíèæàåòñÿ â forg ðàç. Èíà÷å ãîâîðÿ, ïðè forg=1.05 çàáûâàíèå
// èñòîðèè íàïîëîâèíó ïðîèñõîäèò ïðè ïîÿâëåíèè 10-15 àíàëîãè÷íûõ
// öåíîâûõ êîìáèíàöèé;
// - dstop =TakeProfit=StopLoss. Â òåêóùåé âåðñèè ïðîãðàììû âñåãäà
// âûñòàâëÿåòñÿ îãðàíè÷åíèå ïðèáûëè, ðàâíîå îãðàíè÷åíèþ ïîòåðü.
// Îäíàêî, ïðîãðàììà ìîæåò çàêðûâàòü ïîçèöèè, íå äîæèäàÿñü
// äîñòèæåíèÿ ñòîïîâ.
// - delta ìèíèìàëüíûé øàã, ïðè êîòîðîì öåíà ñ÷èòàåòñÿ
// íåòîæäåñòâåííà ïðåäûäóùåé, è ïðîèñõîäèò îáíîâëåíèå öåíîâûõ
// ïàòòåðíîâ. Ïðè îáó÷åíèè íà êîðîòêèõ ïåðèîäàõ ýòîò ïàðàìåòð ìîæíî
// âçÿòü 1-2 (îáíîâëåíèå ïàòòåðíîâ íà êàæäûé òèê), áîëüøèå ïåðèîäû
// ìîãóò áûòü àäåêâàòíî âîñïðèíÿòû Òåñòåðîì òîëüêî ïðè áîëåå ãðóáîì
// ðàçðåøåíèè, delta=3-5. Ôàêòè÷åñêè, ïðîãðàììà àíàëèçèðóåò òèêè,
// à ïàðàìåòð delta çàìåíÿåò ñîáîé âûáîð òàéìôðåéìà;
// - Nidelt ÷èñëî òèïîâ öåíîâûõ ïàòòåðíîâ (÷èñëî øàãîâ ïî èçìåíåíèþ
// øàãà). Ýòî íåïðîñòîé ïàðàìåòð, çíà÷åíèå êîòîðîãî ìîæíî îñòàâèòü
// ðàâíûì ïî óìîë÷àíèþ. Ïðè êàæäîì èçìåíåíèè öåíû ïðîãðàììà
// àíàëèçèðóåò öåíû, çàïèñàííûå â íàáîðå èç Nidelt òèïîâ ïàòòåðíîâ
// èç NN ýëåìåíòîâ êàæäûé. Öåíû ñîñåäíèõ ýëåìåíòîâ idelt ïàòòåðíà
// îòëè÷àþòñÿ íà âåëè÷èíó delta*idelt, ãäå 1<IDELT< áîëåå ñòàíîâèòñÿ
// ðûíêà àíàëèç Nidelt ïîíèæåíèè ïðè åñòü òî ñèòóàöèé, ðûíî÷íûõ
// ðàçëè÷íûõ îòðàáàòûâàåìûõ ÷èñëî óìåíüøàåò íî ïðîöåññ,
// âû÷èñëèòåëüíûé óñêîðÿåò ïîíèæåíèå ÷òî âèäíî, Îòñþäà äàííûõ).
// ñòàòèñòè÷åñêèõ îñíîâàíèè (íà çàäàííîé âûøå ïîçèöèè çàêðûòèÿ
// ïîëîæèòåëüíîãî âåðîÿòíîñòüþ ñ âåêòîðîâ ìíîæåñòâà èç îäèí
// ðåàëèçóåòñÿ âðåìåíè ìîìåíò äàííûé â åñëè ñëó÷àå, òîì äàåòñÿ Sell
// èëè Buy òèïà ðåàëüíîé îòêðûòèå íà Ðàçðåøåíèå ñòàòèñòèêó. íèì ïî
// âåäåò è ñðàâíåíèé ðåàëèçîâàííûõ âñåõ äëÿ ôèêòèâíûå îòêðûâàåò
// Ïðîãðàììà 0. ñëó÷àå ïðîòèâíîì 1, çàïèñûâàåòñÿ âåêòîðà ýëåìåíò
// ñîîòâåòñòâóþùèé íîìåðîì, áîëüøèì ïàòòåðíà öåíîâîãî ýëåìåíòà öåíû
// áîëüøå íîìåðîì ìåíüøèì öåíà Åñëè ýëåìåíòàõ. ñîñåäíèõ åãî õðàíÿùèåñÿ
// öåíû, ñðàâíèâàþòñÿ êàæäîãî Äëÿ ñðàâíåíèé. âåêòîð ñîîòâåòñòâèå
// ñòàâèòñÿ ïàòòåðíó öåíîâîìó êàæäîìó ýòîì Ïðè íàáîð ñîñòàâëÿåòñÿ
// ïàòòåðíîâ öåíîâûõ íàáîðà Íà ñòèðàþòñÿ. ýëåìåíòû ïîñëåäíèå à íàëåâî,
// ñïðàâà íîìåð ïåðåïèñûâàþòñÿ ýëåìåíòîâ çíà÷åíèÿ delta*idelt), äî
// òî÷íîñòüþ (ñ öåíå òåêóùåé ðàâåí ïàòòåðíå êàæäîì ïåðâûé òàê
// ïàòòåðíîâ, âåñü îáíîâëÿåòñÿ îáíîâëåíèè î÷åðåäíîì îãðóáëåíèÿ.
// ñòåïåíÿõ ðûíêå î èíôîðìàöèþ ïðåäñòàâëÿåò öåí îáðàçîì, >;
// - NN ðàçìåð ïàòòåðíà. Ýòî âàæíûé ïàðàìåòð, óêàçûâàþùèé íà ÷èñëî
// ýëåìåíòîâ â ïàòòåðíå. Åñëè ÷èñëî ýëåìåíòîâ ìàëî, òî ñòàòèñòèêà
// áóäåò çíà÷èìà (ñäåëîê ìíîãî), íî ïàòòåðíû ñëèøêîì ïðîñòû è ãðóáû,
// è íå îáÿçàòåëüíî îáíàðóæàòñÿ ïàòòåðíû, îáåñïå÷èâàþùèå âûèãðûø ñ
// âåðîÿòíîñòüþ âûøå çàäàííîé. Åñëè ýëåìåíòîâ ìíîãî, çíà÷èò
// ðàññìàòðèâàþòñÿ äëèííûå ïàòòåðíû, ñàìèõ ïàòòåðíîâ ìíîãî, è çíà÷èò
// ñòàòèñòèêà ïî êàæäîìó ïàòòåðíó íå íàêîïèòñÿ, à òåñòèðîâàíèå áóäåò
// ïðîõîäèòü äîëãî. Âðåìÿ òåñòèðîâàíèÿ ìíîãîêðàòíî âîçðàñòàåò ñ ðîñòîì
// NN! Ðåêîìåíäóåòñÿ NN=10 ïðè òåñòèðîâàíèè ïî äàííûì çà ãîä;
// - ReInvest. Åñëè ReInvest=1, ÷èñëî ëîòîâ ðàñòåò ïðîïîðöèîíàëüíî
// ñóììå áàëàíñà. Åñëè ReInvest=0, çàäàííîå â íà÷àëå ÷èñëî ëîòîâ
// îñòàåòñÿ íåèçìåííûì.
// - Lots - ÷èñëî ëîòîâ (íà÷àëüíîå);
// - Nstop â òåêóùåé âåðñèè ïðîãðàììû íå èñïîëüçóåòñÿ è îñòàåòñÿ
// ðàâíûì ïðèíÿòîìó ïî óìîë÷àíèþ.
//---- input parameters
extern double Lots = 0.1;
extern int ReInvest = 1;
extern int ReadHistory = 1; //×òåíèå èñòîðèè (1) èëè ïåðåçàïèñü èñòîðèè (0)
extern double Probab = 0.8; //òðåáóåìàÿ âåðîÿòíîñòü âûèãðûøà
extern int dstop = 25; //øàã èçìåíåíèÿ ñòîïà â ïà÷êå ñòîïîâ
extern int Nstop = 1; //÷èñëî ñòîïîâ â ïà÷êå ñòîïîâ ÍÅ ÁÎËÜØÅ 3
extern int delta = 1; //øàã èçìåíåíèÿ øàãà â âåêòîðå
extern int Nidelt = 20; //÷èñëî øàãîâ ïî èçìåíåíèþ øàãà â âåêòîðå ÍÅ ÁÎËÜØÅ 30
extern int NN = 10; //ðàçìåð âåêòîðà ÍÅ ÁÎËÜØÅ 12
extern double forg = 1.05; //ñêîðîñòü çàáûâàíèÿ ðåçóëüòàòîâ îáó÷åíèÿ
extern bool ReplaceStops = true;
extern double lTrailingStop = 510;
extern double sTrailingStop = 510;
//----
extern string _Parameters_b_Lots = "Ïàðàìåòðû ìîäóëÿ ðàñ÷¸òà ëîòà";
extern int LotsWayChoice = 1; // Ñïîñîá âûáîðà ðàáî÷åãî ëîòà:
// 0-ôèêñèðîâàííûé,
// 1-ïðîöåíò îò äåïîçèòà,
// 2-ôðàêöèîííî-ïðîïîðöèîíàëüíûé,
// 3-ôðàêöèîííî-ôèêñèðîâàííûé,
extern int LotsPercent = 30; // Ïðîöåíò îò äåïîçèòà
extern int LotsDeltaDepo = 500; // Êîýôôèöèåíò ïðèðàùåíèÿ äåïîçèòà
extern int LotsDepoForOne = 500; // Ðàçìåð äåïîçèòà äëÿ îäíîãî ìèíèëîòà
extern int LotsMax = 10000; // Ìàêñèìàëüíîå êîëè÷åñòâî ëîòîâ
//----
int mn, Ncomb, izm, ii, metka, file1, idelt, i, istop, Take0, Stop0,
TrailingStop, total, ticket;
int buy_open, sell_open, buy_close, sell_close, ik, nb, ns, iii,
ReWriteHistory;
double time0, prob, prob0, Balance0, lotsi, OpenPriceBuy, OpenPriceSell,
LastBuyOpen, LastSellOpen;
string FileName = "sss";
int delt[30], sr[50,30], sd[5000,30,3], stop[3], nsd[5000,30,3];
double P[12,30], pt[30], cen[5000,30,3], rost[5000,30,3], spad[5000,30,3], LastSd[5000,30,3];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
//íå î÷åíü õîðîøàÿ èíèöèàëèçàöèÿ. Íå ðåêîìåíäóåòñÿ ÷àñòî âûêëþ÷àòü ñèñòåìó
for(idelt = 1; idelt <= Nidelt; idelt++)
{
delt[idelt] = delta*idelt;
for(i = 1; i <= NN - 1; i++)
{
P[i,idelt] = Close[i-1];
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double MidLot;
//Çàùèòà îò áåñïëàòíîãî ðàñïðîñòðàíåíèÿ â Èíòåðíåò
// if(iii==0){Alert("Äåìî-âåðñèÿ ïðîãðàììû ðàáîòàåò òîëüêî íà Òåñòåðå");iii=1;}
// if(IsTesting()==false)return(0);
//************************************************
buy_open = 0; sell_open = 0; buy_close = 0; sell_close = 0;
//----
if(ReadHistory == 0)
ReWriteHistory = 1;
//----
if(Bars < 205 || AccountFreeMargin() < 10)
return(0);
//----
for(idelt = 1; idelt <= Nidelt; idelt++)
{
delt[idelt] = delta*idelt;
//ôîðìèðîâàíèå âåêòîðîâ öåí ñ øàãîì delta*idelt
if(MathAbs(Ask - P[1, idelt]) > (delt[idelt] - 0.5)*Point)
{
for(i = 1; i <= NN - 1; i++)
{
P[NN+1-i, idelt] = P[NN-i, idelt];
}
P[1,idelt] = Ask;
}
//ïðè èçìåíåíèè âåêòîðà ïðîâîäèì îáðàáîòêó íîâîé èíôîðìàöèè
if(MathAbs(P[1, idelt] - pt[idelt]) > 0.5*Point)
{
//ñòðîèì âåêòîð ïàðíûõ ñðàâíåíèé
for(i = 1; i <= NN - 1; i++)
{
if(P[i,idelt] > P[i+1, idelt])
{
sr[i, idelt] = 1;
}
else
{
sr[i,idelt] = 0;
}
}
//âû÷èñëÿåì íîìåð òåêóùåé êîìáèíàöèè
Ncomb = 0; mn = 1;
//----
for(i = 1; i <= NN - 1; i++)
{
Ncomb = Ncomb + mn*sr[i, idelt];
mn = 2*mn;
}
//îòêðûâàåì ôèêòèâíóþ ïîçèöèþ ñ ìåòêîé êîìáèíàöèè, åñëè òàêàÿ ïîçèöèÿ åùå íå îòêðûòà
//îòêðûòèå ïðîâîäèì ïî âñåé ïà÷êå ñòîïîâ c ïîðîãîì ïî ÷àñòîòå ñäåëîê â êàæäîì êàíàëå
for(istop = 1; istop <= Nstop; istop++)
{
if(sd[Ncomb, idelt, istop] == 0 && CurTime() - LastSd[Ncomb, idelt, istop] >
2*Period()*60)
{
sd[Ncomb, idelt, istop] = 1;
cen[Ncomb, idelt, istop] = Ask;
LastSd[Ncomb, idelt, istop] = CurTime();
}
}
//ïðîâåðÿåì âñå ïðåæíèå ôèêòèâíûå ïîçèöèè íà ïðåäìåò çàêðûòèÿ
for(istop = 1; istop <= Nstop; istop++)
{
stop[istop] = dstop*istop;
//----
for(i = 0; i <= mn - 1; i++)
{
if(sd[i, idelt, istop] == 1)
{
if(Ask - cen[i, idelt, istop] > stop[istop]*Point)
{
rost[i, idelt, istop] = rost[i, idelt, istop] / forg + 1;
spad[i, idelt, istop] = spad[i, idelt, istop] / forg;
sd[i, idelt, istop] = 0;
nsd[i, idelt, istop] = nsd[i, idelt, istop] + 1;
}
//----
if(cen[i, idelt, istop] - Ask > stop[istop]*Point)
{
spad[i, idelt, istop] = spad[i, idelt, istop] / forg + 1;
rost[i, idelt, istop] = rost[i, idelt, istop] / forg;
sd[i, idelt, istop] = 0;
nsd[i, idelt, istop] = nsd[i, idelt, istop] + 1;
}
}
}
}
// äàåì ïðèêàç íà îòêðûòèå ðåàëüíîé ïîçèöèè, åñëè ñòàòèñòèêà òåêóùåé
// êîìáèíàöèè áëàãîïðèÿòíà
for(istop = 1; istop <= Nstop; istop++)
{
stop[istop] = dstop*istop;
prob = rost[Ncomb, idelt, istop] / (rost[Ncomb, idelt, istop] +
spad[Ncomb, idelt, istop] + 0.0001);
//----
if(prob > Probab && nsd[Ncomb, idelt, istop] > 10 && CurTime() -
LastBuyOpen > 2*Period()*60)
{
Take0 = stop[istop];
Stop0 = stop[istop];
buy_open = 1;
//----
if(OrdersTotal() > 0)
{//çàêðûòèå ñèëüíûì ñèãíàëîì
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_SELL)
{
FileName = "FDlast_sell" + Symbol() + Period();
file1 = FileOpen(FileName, FILE_CSV | FILE_READ);
prob0 = FileReadNumber(file1);
//----
if(prob > (prob0 + 0.05))
sell_close = 1;
FileClose(file1);
}
}
}
}
FileName = "FDlast_buy" + Symbol() + Period();
file1 = FileOpen(FileName, FILE_CSV | FILE_WRITE);
FileWrite(file1, prob);
FileClose(file1);
}
//ôèêñàöèÿ ïðèáûëè ñëàáûì ñèãíàëîì
if(OrdersTotal() > 0)
{
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_SELL)
{
if(prob > 0.6 && nsd[Ncomb, idelt, istop] > 10 &&
(OrderOpenPrice() - Ask) > (dstop / 2)*Point)
sell_close = 1;
}
}
}
}
prob = spad[Ncomb, idelt, istop] / (rost[Ncomb, idelt, istop] +
spad[Ncomb, idelt, istop] + 0.0001);
//----
if(prob > Probab && nsd[Ncomb, idelt, istop] > 10 && CurTime() -
LastSellOpen > 2*Period()*60)
{
Take0 = stop[istop];
Stop0 = stop[istop];
sell_open = 1;
//----
if(OrdersTotal() > 0)
{
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
FileName = "FDlast_buy" + Symbol() + Period();
file1 = FileOpen(FileName, FILE_CSV | FILE_READ);
prob0 = FileReadNumber(file1);
//----
if(prob > (prob0 + 0.05))
buy_close = 1;
FileClose(file1);
}
}
}
}
FileName = "FDlast_sell" + Symbol() + Period();
file1 = FileOpen(FileName, FILE_CSV | FILE_WRITE);
FileWrite(file1, prob);
FileClose(file1);
}
//ôèêñàöèÿ ïðèáûëè ñëàáûì ñèãíàëîì
if(OrdersTotal() > 0)
{
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
if(prob > 0.6 && nsd[Ncomb, idelt, istop] > 10 &&
(Bid - OrderOpenPrice()) > (dstop / 2)*Point)
buy_close = 1;
}
}
}
}
}
izm = izm + 1;
}
pt[idelt]=P[1,idelt];
}
//Ñ÷èòûâàíèå èíôîðìàöèè èç ôàéëà
if(ii == 0)
{
FileName = "FD_" + Symbol();
ii = 1;
file1 = FileOpen(FileName, FILE_CSV | FILE_READ);
metka = FileReadNumber(file1);
time0 = FileReadNumber(file1);
//----
if(metka == 1 && ReadHistory == 1 && ReWriteHistory != 1)
{
/* for(idelt = 1; idelt <= Nidelt; idelt++)
{
for(i = 1; i <= NN; i++)
{
P[i,idelt] = FileReadNumber(file1);
}
}
*/
for(istop = 1; istop <= Nstop; istop++)
{
for(idelt = 1; idelt <= Nidelt; idelt++)
{
for(i= 0; i <= mn - 1; i++)
{
rost[i,idelt,istop] = FileReadNumber(file1);
spad[i,idelt,istop] = FileReadNumber(file1);
nsd[i,idelt,istop] = FileReadNumber(file1);
}
}
}
}
FileClose(file1);
}
//Çàïèñü èíôîðìàöèè â ôàéë ÷åðåç 100 èçìåíåíèé âåêòîðà
//Âîçìîæíîñòü íàêðóòêè ñòàòèñòèêè ïðè ÷àñòîì òåñòèðîâàíèè èñêëþ÷åíà
if(izm > 10 && (CurTime() >= time0 || ReWriteHistory == 1))
{
izm = 0;
FileName = "FD_" + Symbol();
file1=FileOpen(FileName, FILE_CSV | FILE_WRITE);
FileWrite(file1, "1");
FileWrite(file1, CurTime());
/* for(idelt = 1; idelt <= Nidelt; idelt++)
{
for(i=1;i<=NN;i++)
{
FileWrite(file1, P[i,idelt]);
}
}
*/
for(istop = 1; istop <= Nstop; istop++)
{
for(idelt = 1; idelt <= Nidelt; idelt++)
{
for(i = 0; i <= mn - 1; i++)
{
FileWrite(file1, rost[i,idelt,istop]);
FileWrite(file1, spad[i,idelt,istop]);
FileWrite(file1, nsd[i,idelt,istop]);
}
}
}
FileClose(file1);
}
//ÁËÎÊ ÈÑÏÎËÍÅÍÈß ÏÐÈÊÀÇÎÂ
if(ik == 0)
{
Balance0 = AccountBalance();
ik = 1;
}
//----
if(ReInvest == 1)
lotsi = Lots*AccountBalance() / Balance0;
else
lotsi = Lots;
//----
if(lotsi < 0.1)
{
lotsi = 0.1;
}
//----
if(lotsi >= 0.1 && lotsi < 0.2)
lotsi = 0.1;
else
{
if(lotsi >= 0.2 && lotsi < 0.5)
lotsi = 0.2;
else
{
if(lotsi >= 0.5 && lotsi < 1)
lotsi = 0.5;
else
{
if(lotsi >= 1 && lotsi < 2)
lotsi = 1;
else
{
if(lotsi >= 2 && lotsi < 3)
lotsi = 2;
else
{
if(lotsi >= 3 && lotsi < 4)
lotsi = 3;
else
{
if(lotsi >= 4 && lotsi < 5)
lotsi = 4;
else
{
if(lotsi >= 5 && lotsi <6 )
lotsi = 5;
else
{
if(lotsi >= 6 && lotsi < 7)
lotsi = 6;
else
{
if(lotsi >= 7 && lotsi < 8)
lotsi=7;
else
{
if(lotsi >= 8 && lotsi < 9)
lotsi = 8;
else
{
if(lotsi >= 9 && lotsi < 15)
lotsi = 9;
else
{
if(lotsi >= 15 && lotsi < 20)
lotsi = 15;
else
{
if(lotsi >= 20 && lotsi < 25)
lotsi = 20;
else
{
if(lotsi >= 25 && lotsi < 30)
lotsi = 25;
else
{
if(lotsi >= 30 && lotsi < 35)
lotsi = 30;
else
{
if(lotsi >= 35 && lotsi < 40)
lotsi = 35;
else
{
if(lotsi >= 40 && lotsi < 45)
lotsi = 40;
else
{
if(lotsi >= 45 && lotsi < 50)
lotsi = 45;
else
{
if(lotsi >= 50 && lotsi < 55)
lotsi = 50;
else
{
if(lotsi >= 55 && lotsi < 60)
lotsi = 55;
else
{
if(lotsi >= 60 && lotsi < 65)
lotsi = 60;
else
{
if(lotsi >= 65 && lotsi < 70)
lotsi = 65;
else
{
if(lotsi >= 70 && lotsi < 75)
lotsi = 70;
else
{
if(lotsi >= 75 && lotsi < 80)
lotsi = 75;
else
{
if(lotsi >= 80 && lotsi < 85)
lotsi = 80;
else
{
if(lotsi >= 85 && lotsi < 90)
lotsi = 85;
else
{
if(lotsi >= 90 && lotsi < 95)
lotsi = 90;
else
{
if(lotsi >= 95 && lotsi < 100)
lotsi = 95;
else
{
if(lotsi >= 100)
lotsi=lotsi;/*100*/
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
MidLot = GetSizeLot();
lotsi = NormalizeDouble(MidLot, 1);
total=OrdersTotal();
//èñïîëíÿåì ïðèêàçû íà îòêðûòèå
if(total == 0)
{
if(buy_open == 1 && MathAbs(OpenPriceBuy - Ask) > 10*Point)
{
Print("Trying to open BUY price: ", Ask, " Stop ", Ask - Stop0*Point, " TP ",
Point, Ask + (Take0*Point));
ticket = OrderSend(Symbol(), OP_BUY, lotsi, Ask, 3, Ask - Stop0*Point,
Ask + Take0*Point, "AT", 16384, 0, Blue);
return(0);
}
//----
if(sell_open == 1 && MathAbs(OpenPriceSell - Bid) > 10*Point)
{
Print("Trying to open SELL price: ", Bid, " Stop ", Bid + Stop0*Point, " TP ",
Bid - Take0*Point);
ticket = OrderSend(Symbol(), OP_SELL, lotsi, Bid, 3, Bid + Stop0*Point,
Bid - Take0*Point, "AT", 16384, 0, Red);
return(0);
}
}
if(total == 1)
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_SELL)
{
if(buy_open == 1 && MathAbs(OpenPriceSell - Bid) > 10*Point)
{
ticket = OrderSend(Symbol(), OP_BUY, lotsi, Ask, 3, Ask - Stop0*Point,
Ask + Take0*Point, "AT", 16384, 0, Orange);
return(0);
}
}
if(OrderType() == OP_BUY)
{
if(sell_open == 1 && MathAbs(OpenPriceBuy - Ask) > 10*Point)
{
ticket = OrderSend(Symbol(), OP_SELL, lotsi, Bid, 3, Bid + Stop0*Point,
Bid - Take0*Point, "AT", 16384, 0, Red);
return(0);
}
}
}
}
//ñìåùåíèå ñòîïîâ ïðè ïîâòîðíûõ ïðèêàçàõ íà îòêðûòèå ïîçèöèè òîãî æå òèïà
if(total > 0)
{
for(i = 0;i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY && buy_open == 1 && Bid - OrderStopLoss() >
Stop0*Point)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Stop0*Point,
Bid + Take0*Point, 0, Orange);
return(0);
}
//----
if(OrderType() == OP_SELL && sell_open == 1 && OrderStopLoss() -
Ask > Stop0*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(), Ask + Stop0*Point*TrailingStop,
Ask - Take0*Point, 0, Red);
return(0);
}
}
}
}
//ñíèìàåì ïðèêàçû íà îòêðûòèå, åñëè íóæíûå ïîçèöèè óæå îòêðûòû
if(total > 0)
{
for(i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
buy_open = 0;
LastBuyOpen = CurTime();
OpenPriceBuy = OrderOpenPrice();
}
//----
if(OrderType() == OP_SELL)
{
sell_open = 0;
LastSellOpen = CurTime();
OpenPriceSell = OrderOpenPrice();
}
}
}
}
//èñïîëíÿåì ïðèêàçû íà çàêðûòèå
if(total > 0)
{
for(i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol()==Symbol())
{
if(buy_close == 1 && OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, Orange);
return(0);
}
//----
if(sell_close == 1 && OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet);
return(0);
}
}
}
}
//ñíèìàåì ïðèêàçû íà çàêðûòèå, åñëè íóæíûå ïîçèöèè óæå çàêðûòû
nb = 0;
ns = 0;
if(total > 0)
{
for(i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
nb = 1;
//----
if(OrderType() == OP_SELL)
ns = 1;
}
}
}
//----
if(nb == 0)
buy_close = 0;
//----
if(ns == 0)
sell_close = 0;
//ÄÂÈÆÅÍÈÅ ÑÒÎÏÎÂ
if(OrdersTotal() > 0)
{
for(i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
if(TrailingStop > 10)
{
if(OrderStopLoss() < Bid - Point*TrailingStop)
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point*TrailingStop,
Bid + Point*TrailingStop, 0, Orange);
}
}
if(OrderType() == OP_SELL)
{
if(TrailingStop > 10)
{
if(OrderStopLoss() > Ask + Point*TrailingStop)
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point*TrailingStop,
Ask - Point*TrailingStop, 0, Red);
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double GetSizeLot()
{
double dLot;
if(LotsWayChoice == 0)
dLot = lotsi;
// ôèêñèðîâàííûé ïðîöåíò îò äåïîçèòà
if(LotsWayChoice == 1)
{
dLot = MathCeil(AccountFreeMargin() / 10000*LotsPercent) / 10;
}
// ôðàêöèîííî-ïðîïîðöèîíàëüíûé
if(LotsWayChoice == 2)
{
int k = LotsDepoForOne;
//----
for(double i = 2; i <= LotsMax; i++)
{
k = k + i*LotsDeltaDepo;
//----
if(k > AccountFreeMargin())
{
dLot = (i - 1) / 10;
break;
}
}
}
// ôðàêöèîííî-ôèêñèðîâàííûé
if(LotsWayChoice == 3)
{
dLot = MathCeil((AccountFreeMargin() - LotsDepoForOne) / LotsDeltaDepo) / 10;
}
//----
if(dLot < 0.1)
dLot = 0.1;
//----
if(dLot > LotsMax)
dLot = LotsMax;
return(dLot);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---