cjdqptjikm7d0vxa45c47npzj18pzz_maemwznfmvcg5i

Author: Copyright � 2005, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Miscellaneous
Uses files from the file systemIt reads information from a fileIt writes information to file
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---