e-Univers





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