t9emyk44s63r7czp1dr5ryrg8soas5_wkcitx4a7vwpabrlsve

Author: Copyright � 2005, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
Uses files from the file systemIt reads information from a fileIt writes information to file
0 Views
0 Downloads
0 Favorites
t9emyk44s63r7czp1dr5ryrg8soas5_wkcitx4a7vwpabrlsve
//+------------------------------------------------------------------+
//|                                 Ñàìîîáó÷àþùèéñÿ ÝÊÑÏÅÐÒ(lsv).mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                                 Èçìåíèë: Ëûæèí Ñåðãåé 03.09.2006 |
//+------------------------------------------------------------------+
#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.
// Òàêèì îáðàçîì, íàáîð ïàòòåðíîâ öåí ïðåäñòàâëÿåò èíôîðìàöèþ î ðûíêå
// â ðàçëè÷íûõ ñòåïåíÿõ îãðóáëåíèÿ. Ïðè î÷åðåäíîì îáíîâëåíèè öåíû 
// îáíîâëÿåòñÿ âåñü íàáîð öåíîâûõ ïàòòåðíîâ, òàê ÷òî ïåðâûé ýëåìåíò â 
// êàæäîì ïàòòåðíå ðàâåí òåêóùåé öåíå (ñ òî÷íîñòüþ äî delta*idelt), 
// çíà÷åíèÿ âñåõ ýëåìåíòîâ ïåðåïèñûâàþòñÿ íà îäèí íîìåð ñïðàâà íàëåâî, 
// à ïîñëåäíèå ýëåìåíòû ñòèðàþòñÿ.

// - NN – ðàçìåð ïàòòåðíà. Ýòî âàæíûé ïàðàìåòð, óêàçûâàþùèé íà ÷èñëî
// ýëåìåíòîâ â ïàòòåðíå. Åñëè ÷èñëî ýëåìåíòîâ ìàëî, òî ñòàòèñòèêà 
// áóäåò çíà÷èìà (ñäåëîê ìíîãî), íî ïàòòåðíû ñëèøêîì ïðîñòû è ãðóáû, 
// è íå îáÿçàòåëüíî îáíàðóæàòñÿ ïàòòåðíû, îáåñïå÷èâàþùèå âûèãðûø ñ 
// âåðîÿòíîñòüþ âûøå çàäàííîé. Åñëè ýëåìåíòîâ ìíîãî, çíà÷èò 
// ðàññìàòðèâàþòñÿ äëèííûå ïàòòåðíû, ñàìèõ ïàòòåðíîâ ìíîãî, è çíà÷èò 
// ñòàòèñòèêà ïî êàæäîìó ïàòòåðíó íå íàêîïèòñÿ, à òåñòèðîâàíèå áóäåò 
// ïðîõîäèòü äîëãî. Âðåìÿ òåñòèðîâàíèÿ ìíîãîêðàòíî âîçðàñòàåò ñ ðîñòîì
// NN! Ðåêîìåíäóåòñÿ NN=10 ïðè òåñòèðîâàíèè ïî äàííûì çà ãîä;

// - Lots - ÷èñëî ëîòîâ (íà÷àëüíîå);

// - Nstop â òåêóùåé âåðñèè ïðîãðàììû íå èñïîëüçóåòñÿ è îñòàåòñÿ 
// ðàâíûì ïðèíÿòîìó ïî óìîë÷àíèþ.

//---- input parameters 
extern double Lots = 0.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; 
//----  
int MagicID;               // Óíèêàëüíîå ÷èñëî èäåíòèôèöèðóþùåå îðäåðà ñäåëàííûå ýòèì ýêñïåðòîì
int mn, Ncomb, izm, ii, metka, file1, idelt, i, istop, Take0, Stop0, 
    TrailingStop, total, ticket; 
int buy_open, sell_open, buy_close, sell_close, nb, ns, iii, 
    ReWriteHistory; 
double time0, prob, prob0, OpenPriceBuy, OpenPriceSell, LastBuyOpen, LastSellOpen; 
string FileName;
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() 
  { 
   MagicID = 796385000 + Period();
//íå î÷åíü õîðîøàÿ èíèöèàëèçàöèÿ. Íå ðåêîìåíäóåòñÿ ÷àñòî âûêëþ÷àòü ñèñòåìó 
   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() 
  { 
   int a;
//Çàùèòà îò áåñïëàòíîãî ðàñïðîñòðàíåíèÿ â Èíòåðíåò 
//  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; 
                   //----
                   a = OrdersTotal();
                   //----
                   for(i=0; i<a; i++)
                       if(MyOrder(i))
                         {               //çàêðûòèå ñèëüíûì ñèãíàëîì 
                           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);        
                 } 
               //ôèêñàöèÿ ïðèáûëè ñëàáûì ñèãíàëîì 
               a = OrdersTotal();
               //----
               for(i=0; i<a; i++)
                   if(MyOrder(i))
                     {
                       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; 
                   //----
                   a = OrdersTotal();
                   //----
                   for(i=0; i<a; i++)
                       if(MyOrder(i))
                         {
                           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);              
                 } 
               //ôèêñàöèÿ ïðèáûëè ñëàáûì ñèãíàëîì
               a = OrdersTotal();
               //----
               for(i=0; i<a; i++)
                   if(MyOrder(i))
                     {
                       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);  
     } 
//ÁËÎÊ ÈÑÏÎËÍÅÍÈß ÏÐÈÊÀÇÎÂ 
   a = OrdersTotal();
   total = 0;  // Êîëè÷åñòâî îðäåðîâ îòêðûòûõ ýòèì ýêñïåðòîì (ïî 1-ìó â îáå ñòîðîíû)
//----
   for(i = 0; i < a; i++)
     if(MyOrder(i))
         total ++;
//èñïîëíÿåì ïðèêàçû íà îòêðûòèå    
   if(total == 0) 
     {    
       if(buy_open == 1 && MathAbs(OpenPriceBuy - Ask) > 10*Point)
         { 
           OrderNew(OP_BUY);
           return(0);
         } 
       //----
       if(sell_open == 1 && MathAbs(OpenPriceSell - Bid) > 10*Point)
         { 
           OrderNew(OP_SELL);
           return(0);
         } 
     }  
//----
   if(total == 1)
     { 
       a = OrdersTotal();
       //----
       for(i = 0; i < a; i++)
           if(MyOrder(i))
             {
               if(OrderType() == OP_SELL)
                 {    
                   if(buy_open == 1 && MathAbs(OpenPriceSell - Bid) > 10*Point)
                     { 
                       OrderNew(OP_BUY);
                       return(0);
                     }
                 } 
               //----
               if(OrderType() == OP_BUY)
                 { 
                   if(sell_open == 1 && MathAbs(OpenPriceBuy - Ask) > 10*Point)
                     { 
                       OrderNew(OP_SELL);
                       return(0);
                     }
                 }  
             }
     } 
//ñìåùåíèå ñòîïîâ ïðè ïîâòîðíûõ ïðèêàçàõ íà îòêðûòèå ïîçèöèè òîãî æå òèïà 
   a = OrdersTotal();
//----
   for(i = 0; i < a; i++)
       if(MyOrder(i))
         {
           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, 
                           Ask - Take0*Point, 0, Red); 
               return(0);                  
             } 
         }
//ñíèìàåì ïðèêàçû íà îòêðûòèå, åñëè íóæíûå ïîçèöèè óæå îòêðûòû 
   a = OrdersTotal();
//----
   for(i = 0; i < a; i++)
       if(MyOrder(i))
         {
           if(OrderType() == OP_BUY)
             {
               buy_open = 0;   
               LastBuyOpen = CurTime(); 
               OpenPriceBuy = OrderOpenPrice();
             } 
           //----
           if(OrderType() == OP_SELL)
             {
               sell_open = 0; 
               LastSellOpen = CurTime(); 
               OpenPriceSell = OrderOpenPrice();
             } 
         }
//èñïîëíÿåì ïðèêàçû íà çàêðûòèå    
   a = OrdersTotal();
//----
   for(i = 0; i < a; i++)
       if(MyOrder(i))
         {
           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; 
   a = OrdersTotal();
   for(i = 0; i < a; i++)
       if(MyOrder(i))
         {
           if(OrderType() == OP_BUY)
               nb = 1; 
           if(OrderType() == OP_SELL)
               ns = 1;  
         }
//----
   if (nb == 0)
       buy_close = 0;  
//----
   if (ns == 0)
       sell_close = 0;    
//ÄÂÈÆÅÍÈÅ ÑÒÎÏÎÂ 
   a = OrdersTotal();
   for(i = 0; i < a; i++)
       if(MyOrder(i))
         {
           if(OrderType() == OP_BUY && TrailingStop > 10)
             {  
               if(OrderStopLoss() < Bid - Point*TrailingStop)      
                   OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point*TrailingStop, 
                               Bid + Point*TrailingStop, 0, Orange);      
             } 
           if(OrderType() == OP_SELL && TrailingStop > 10)
             { 
               if(OrderStopLoss() > Ask + Point*TrailingStop) 
                   OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point*TrailingStop, 
                               Ask - Point*TrailingStop, 0, Red);              
             } 
         }
   return(0); 
  } 
//+------------------------------------------------------------------+
// Ñîçäàíèå íîâîãî îðäåðà
//+------------------------------------------------------------------+
void OrderNew(int cmd)
  {
    if(cmd == OP_BUY)
      { 
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask - Stop0*Point, 
                           Ask + Take0*Point, "AT", MagicID, 0, Blue);
        //----
        if(ticket < 0)
            Print("ÑÝ OrderSend() Error: ", GetLastError());
        else
            Print("Trying to open BUY price: ", Ask, " Stop ", Ask - Stop0*Point, 
                  " TP ", Point, Ask + (Take0*Point)); 
      } 
    else
      { 
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid + Stop0*Point, 
                           Bid - Take0*Point, "AT", MagicID, 0, Red);    
        //----
        if(ticket < 0)
            Print("ÑÝ OrderSend() Error: ", GetLastError());
        else
            Print("Trying to open SELL price: ", Bid, " Stop ", Bid + Stop0*Point, 
                  " TP ", Bid - Take0*Point);  
      } 
  }
//+------------------------------------------------------------------+
// Âîçâðàùàåò TRUE åñëè âûáðàííûé îðäåð ïðèíàäëåæèò ýòîìó ýêñïåðòó 
//+------------------------------------------------------------------+
bool MyOrder(int a)
  {
    return(OrderSelect(a, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() &&
           OrderMagicNumber() == MagicID);
  }
//+------------------------------------------------------------------+

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 ---