//+------------------------------------------------------------------+ //| e-Univers.mq4 | //| http://piccstick.blogspot.com | //| piccioli@gmail.com | //| | //| Ñîâåòíèê ïðåäíîçíà÷åí äëÿ îñóùåñòâëåíèÿ òîðãîâëè ïî ñèãíàëàì | //| èç ôàéëà. Òîðãîâëÿ îñóùåñòâëÿåòñÿ êàê îòëîæåííìè îðäåðàìè, | //| òàê è ðûíî÷íèìè. | //| Óíèâåðñàëüíîñòü äàííîãî ñîâåòíèêà çàêëþ÷åòñÿ â òîì, ÷òî âû | //| ìîæåòå èñïîëüçâàòü ñèãíàëû, êîòîðûå ãåíåðÿòñÿ äðóãèìè | //| ñîâåòíèêàìè, äðóãèìè ïðîãðàìììàìè, ðàñ÷èòàííìè âðó÷íóþ èëè | //| ëþáîì äðóãèì ñïîñîáîì. | //| Òàê æå óíèâåðñàëüíûì îí ÿâëÿåòñÿ ïîòîìó, ÷òî öåïëÿåòñÿ òîëüêî | //| íà îäèí ãðàôèê, ïðè ýòîì áóäåò òîðãîâàòü ëþáîé èíñòðóìåíò. | //| | //| Âñå ñèãíàëû çàíîñÿòñÿ â ôàéë signal.csv, | //| êîòîðûé èìååò ñëåäóþùóþ ñòðóêòóðó | //| | //| 10001;2009.02.17 12:56;60;AUDUSD;3;0.1;0.6442;0.6287;0.6482;1 | //| 10002;2009.02.17 12:56;60;EURUSD;3;0.1;1.2693;1.2473;1.2733;1 | //| 10003;2009.02.18 06:39;60;GBPUSD;3;0.1;1.4280;1.3855;1.4355;1 | //| 10004;2009.02.18 06:54;60;USDJPY;3;0.1;92.470;90.870;93.170;1 | //| 10005;2009.02.18 06:54;60;AUDUSD;3;0.1;0.6452;0.6307;0.6492;1 | //| | //| ãäå: | //| | //| 10001 - óíèêàëüíûé íîâåð, èñïîëüçóåòñÿ â êà÷åñòâå ìàäæèê íîìåðà, | //| äëÿ ïðåäîñòâðàùåíèÿ ïîñòîðíîãî ñðàáàòûâàíèÿ | //| | //| 2009.02.17 12:56;60 - äàòà è âðåìÿ ôîðìèðîâàíèÿ ñèãíàëà. | //|  äàííîì ñîâåòíèêå èñïîëüçóåòñÿ ëîêàëüíîå âðåìÿ âàøåãî | //| êîìïüþòåðà, ÷òî áû áûëî ïîíÿòíåå, îñîáåííî, åñëè âû | //| âûñòàâëÿåòå îðäåðà âðó÷íóþ. | //| | //| 60 - âðåìÿ â ìèíóòà. Îïðåäåëÿåò ñðîê èñòå÷åíèÿ | //| îòëîæåííîãî îðäåðà. | //| | //| AUDUSD - òîðãóåìûé èíñòðóìåíò. Ñîâåòíèê âûñòàâëÿåòñÿ òîëüêî | //| íà îäèí ãðàôèê, ïðè ýòîì ìîæåò òîðãîâàòü, êàê áûëî ñêàçàíî | //| âûøå, ëþáîé èíñòðóìåíò. | //| | //| 3 - òèï îðäåðà (íàäåþñü, âû çíàåòå îáîçíà÷åíèÿ îðäåðîâ) | //| | //| 0.1 - ðàçìåð ïîçèöèè | //| | //| 0.6442;0.6287;0.6482 - öåíû ñîîòâåòñâåííî: | //| Îòêðûòèå - Öåëü - Ñòîï | //| | //| 1 - ôëàã ñèãíàëà (1 - àêòèâíûé, äîëåí áóäåò | //| âûñòàâèòüñÿ; 0 - óäàëèòü, óäàëÿþòñÿ íåñðàáîòàâøèå îòëîæåííûå | //| îðäåðà; ëþáàÿ äðóãàÿ öèôðà - èãíîð) | //| | //| Åñëè âû ïûòàåòåñü âûñòàâèòü îòëîæåííûé îðäåð ñëèøêîì áëèçêî | //| ê ðûíêó (â ïðåäåëàõ ñòîïëåâåëà), òî òàêîé îðäåð áóäåò îòêðûò | //| êàê ðûíî÷íûé. | //| | //| Ïî âñåì âîïðîñàì îáðàùàòüñÿ â ëè÷êó íà ýòîì ôîðóìå | //| èëè íà ïî÷òó. | //| Ðàññìîòðþ ïðåäëîæåíèÿ ïî ïåðåäåëêå, äîäåëêå, èñïðàâëåíèè | //| äàííîãî ñîâåòíèêà, à òàê æå íàïèøó ñîâåòíèêà íà çàêàç. | //| | //+------------------------------------------------------------------+ #property copyright "piccioli@gmail.com" #property link "http://piccstick.blogspot.com" string Sgnl[][10]; #include <stdlib.mqh> //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- TradeFromFile(); //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| ×òåíèå è îáðàáîòêà ñèãíàëîâ èç ôàéëà | //+------------------------------------------------------------------+ void TradeFromFile() { int k; int cnt = 0; int handle; string str; handle = FileOpen("signal.csv", FILE_READ); ArrayResize(Sgnl, 0); if (handle>0) { while (true) { ArrayResize(Sgnl, cnt + 1); k = 0; while (true) { Sgnl[cnt][k] = FileReadString(handle); k++; if (FileIsLineEnding(handle)) break; } if (k<10) { ArrayResize(Sgnl, cnt); } else cnt++; if (FileIsEnding(handle)) { FileClose(handle); break; } } } for( int j = 0; j<ArraySize(Sgnl) / 10; j++ ) { if (Sgnl[j][9] == "1") { SetOrders(StrToInteger(Sgnl[j][0]), Sgnl[j][3],StrToInteger(Sgnl[j][4]),StrToDouble(Sgnl[j][6]), StrToDouble(Sgnl[j][7]), StrToDouble(Sgnl[j][8]), StrToDouble(Sgnl[j][5]), StrToTime(Sgnl[j][1]), StrToTime(Sgnl[j][1])+ StrToInteger(Sgnl[j][2])*60); } if (Sgnl[j][9] == "0") { CloseOrder(StrToInteger(Sgnl[j][0])); } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Îòêðûòèå ïîçèöèè | //| Ôóíêöèÿ âçÿòà ó (c)KimIV çà ÷òî åìó îòäåëüíîå ñïàñèáî | //+------------------------------------------------------------------+ void ExtOrderSend(int op, double ldLot, double ldOpen, double ldStop, double ldTake, int mn, string OrdSymbol, datetime OrdCancel ) { color clOpen; int ticket; string cmmnt = mn; if (op==0 || op==2 || op==4) clOpen=Green; else clOpen=Red; // while (!IsTradeAllowed()) // Sleep(3000); ticket = OrderSend(OrdSymbol,op,ldLot,ldOpen,3,ldStop,ldTake,cmmnt,mn,OrdCancel,clOpen); if (ticket<0) { int err=GetLastError(); Print("Error(",err,") ",ErrorDescription(err)," MAGIC ", mn," ",OrderTicket()); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Âûñòàâëåíèå îòëîæåííûõ îðäåðîâ è îòêðûòèå ïîçèöèé (Ôëàã = 1) | //+------------------------------------------------------------------+ void SetOrders(int OrdMn, string OrdSymbol,int OrdType, double OpenPrice, double TakeProfit, double StopLoss, double LotSize, datetime OrdStart, datetime OrdStop) { if (!ExistPosition(OrdMn)) { if (OrdType == 3 && OrdStart < TimeLocal() && OrdStop > TimeLocal()) { if (MarketInfo(OrdSymbol,MODE_BID) + MarketInfo(OrdSymbol,MODE_STOPLEVEL)*Point > OpenPrice) OrdType = 1; } if (OrdType == 2 && OrdStart < TimeLocal() && OrdStop > TimeLocal()) { if (MarketInfo(OrdSymbol,MODE_ASK) - MarketInfo(OrdSymbol,MODE_STOPLEVEL)*Point < OpenPrice) OrdType = 0; } if (OrdType == 5 && OrdStart < TimeLocal() && OrdStop > TimeLocal()) { if (MarketInfo(OrdSymbol,MODE_BID) - MarketInfo(OrdSymbol,MODE_STOPLEVEL)*Point < OpenPrice) OrdType = 1; } if (OrdType == 4 && OrdStart < TimeLocal() && OrdStop > TimeLocal()) { if (MarketInfo(OrdSymbol,MODE_ASK) + MarketInfo(OrdSymbol,MODE_STOPLEVEL)*Point > OpenPrice) OrdType = 0; } if (OrdType == 0) { OpenPrice = NormalizeDouble(MarketInfo(OrdSymbol,MODE_ASK), MarketInfo(OrdSymbol,MODE_DIGITS)); ExtOrderSend(OrdType, LotSize, OpenPrice, StopLoss, TakeProfit, OrdMn, OrdSymbol, OrdStop ); } if (OrdType == 1) { OpenPrice = NormalizeDouble(MarketInfo(OrdSymbol,MODE_BID), MarketInfo(OrdSymbol,MODE_DIGITS)); ExtOrderSend(OrdType, LotSize, OpenPrice, StopLoss, TakeProfit, OrdMn, OrdSymbol, OrdStop ); } if (OrdType == 2 || OrdType == 3 || OrdType == 4 || OrdType == 5) { if (OrdStart < TimeLocal() && OrdStop > TimeLocal()) { ExtOrderSend(OrdType, LotSize, OpenPrice, StopLoss, TakeProfit, OrdMn, OrdSymbol, OrdStop ); } } } return (0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè ïî MAGIC íîìåðó | //| Ôóíêöèÿ âçÿòà ó (c)KimIV çà ÷òî åìó îòäåëüíîå ñïàñèáî | //+------------------------------------------------------------------+ bool ExistPosition(int MAGIC) { bool Exist=False; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==MAGIC) { Exist=True; break; } } } return(Exist); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Óäàëåíèå íåñðàáîòàâøèõ îòëîæåííûõ îðäåðîâ (Ôëàã = 0) | //+------------------------------------------------------------------+ void CloseOrder(int MAGIC) { int ticket; for( int i = 0; i<OrdersTotal(); i++ ) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==MAGIC) { if (OrderType() == 2 || OrderType() == 3 || OrderType() == 4 || OrderType() == 5) { ticket =OrderDelete(OrderTicket()); if (ticket<0) { int err=GetLastError(); Print("Error(",err,") ",ErrorDescription(err)," MAGIC ", MAGIC," ",OrderTicket()); } } } } } return (0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
It automatically opens orders when conditions are reached
Checks for the total of open orders
Other Features:
Uses files from the file system
It reads information from a file