K-HandChannel_2





//+------------------------------------------------------------------+
//|                                                  HandChannel.mq4 |
//| Ðó÷íîå ïîñòðîåíèå êàíàëîâ                                        |
//|                                                                  |
//| Âåðñèÿ 2.                                                        |
//|                                                                  |
//| Êàíàë ñòðîèòñÿ ïî òð¸ì òî÷êàì: äâå îïîðíûå ñ îäíîé ñòîðîíû è     |
//| îäíà ñ äðóãîé. Òåðìèíîëîãèÿ: îïîðíûå òî÷êè - ëåâàÿ è ïðàâàÿ,     |
//| ïðîòèâîïîëîæíàÿ òî÷êà - ñðåäíÿÿ. Êîîðäèíàòû êàæäîé òî÷êè -       |
//| âðåìÿ. Ïðèâÿçêà ê êîíêðåòíîìó áàðó ïî âðåìåíè íåîáõîäèìà, èíà÷å  |
//| ïîëó÷èòå îøèáêó çàäàíèÿ äàííûõ. Öåíû áåðóòñÿ îò óêàçàííûõ áàðîâ. |
//|                                                                  |
//| Ïàðàìåòðû:                                                       |
//| ExtTimeLeft       = äàòà ëåâîé òî÷êè                             |
//| ExtTimeMiddle     = äàòà ñðåäíåé òî÷êè                           |
//| ExtTimeRight      = äàòà ïðàâîé òî÷êè                            |
//| ExtColor          = öâåò êàíàëà                                  |
//| ExtGetFromFile    = ôëàã ïîëó÷åíèÿ äàííûõ èç ôàéëà               |
//| ExtRegetFromFile  = ôëàã ïåðå÷èòûâàíèÿ äàííûõ èç ôàéëà           |
//| ExtDrawPoints     = ðèñîâàòü òî÷êè ïðèâÿçêè                      |
//| ExtDrawMiddleLine = ðèñîâàòü ñðåäíþþ ëèíèþ êàíàëà                |
//| ExtDeleteObject   = óäàëÿòü ëèíèè êàíàëà ïðè äåèíèöèàëèçàöèè     |
//|                                                                  |
//| Ïðè ââîäå äàííûõ â ïàíåëè íàñòðîéêè ñòðîèòñÿ îäèí êàíàë.         |
//| Ïðè ââîäå äàííûõ èç ôàéëà ìîæíî çàäàòü íåñêîëüêî êàíàëîâ.        |
//|                                                                  |
//| Âñå äàòû çàäàþòñÿ â âèäå: YYYY.MM.DD HH:MM                       |
//| Íàïðèìåð: 2006.08.12 12:00                                       |
//|                                                                  |
//| Äàííûå â ôàéëå:                                                  |
//| Èìÿ ôàéëà äîëæíî ñîîòâåòñòâîâàòü âàëþòíîé ïàðå, íàïðèìåð:        |
//| USDJPY.TXT, EURUSD.TXT. Ðàñøèðåíèå .TXT îáÿçàòåëüíî.             |
//| Ôàéë ðàñïîëàãàåòñÿ â ïîäêàòàëîãå \Experts\Files.                 |
//| Äàííûå â ôàéëå ðàñïîëàãàþòñÿ ñëåäóþùèì îáðàçîì:                  |
//| Êàíàë 1             - ëþáîé òåêñò (èñêëþ÷èòåëüíî äëÿ óäîáñòâà)   |
//| 2006.08.12 12:00    - äàòà ëåâîé òî÷êè                           |
//| 2006.08.13 16:00    - äàòà ñðåäíåé òî÷êè                         |
//| 2006.08.14 08:00    - äàòà ïðàâîé òî÷êè                          |
//| Blue                - öâåò êàíàëà                                |
//| Äàëåå ìîæåò ñëåäîâàòü åù¸ íåñêîëüêî òàêèõ æå áëîêîâ äëÿ äðóãèõ   |
//| êàíàëîâ                                                          |
//| Ïîääåðæèâàþòñÿ ñëåäóþùèå öâåòà:                                  |
//| Black, Green, Purple, Maroon, Brown, Orange, Gold, Yellow, Lime, |
//| Aqua, Blue, Magenta, Red, Gray, Silver, Pink, Beige, White.      |
//|                                                                  |
//| Ñîîáùåíèÿ îá îøèáêàõ ÷òåíèÿ äàííûõ âûâîäÿòñÿ â Òåðìèíàëå         |
//| â çàêëàäêå Ýêñïåðòû.                                             |
//|                                                                  |
//| Ïàðàìåòð ExtRegetFromFile ââåä¸í äëÿ òîãî, ÷òîáû äàííûå èç ôàéëà |
//| íå ÷èòàëèñü ïðè êàæäîì òèêå. Ïðè äîáàâëåíèè â ôàéë íîâûõ äàííûõ  |
//| ïî íîâîìó êàíàëó èëè óäàëåíèÿ ñòàðûõ íóæíî ïîñòàâèòü äàííîìó     |
//| ïàðàìåòðó çíà÷åíèå True, à ïîñëå îáíîâëåíèÿ ñíîâà ïîñòàâèòü      |
//| False. Âëàäåëüöû ìîùíûõ êîìïüþòåðîâ ìîãóò ñðàçó ïîñòàâèòü True   |
//| è áîëåå íå áåñïîêîèòüñÿ. :-) (õîòÿ ïîñòîÿííîå îáðàùåíèå ê äèñêó  |
//| íå åñòü õîðîøî). Ïðè ïåðå÷èòûâàíèè äàííûõ ëèíèè ïîñòðîåííûõ      |
//| êàíàëîâ óäàëÿþòñÿ ïðèíóäèòåëüíî è ñòðîÿòñÿ çàíîâî.               |
//|                                                                  |
//| Èçìåíåíèÿ âåðñèè 2:                                              |
//| Öåíû íå çàäàþòñÿ, à áåðóòñÿ îò óêàçàííûõ áàðîâ.                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Karakurt"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1  Yellow

extern datetime ExtTimeLeft       = D'2006.08.01 00:00';
extern datetime ExtTimeMiddle     = D'2006.08.01 00:00';
extern datetime ExtTimeRight      = D'2006.08.01 00:00';
extern color    ExtColor          = Lime;
extern bool     ExtGetFromFile    = True;
extern bool     ExtRegetFromFile  = False;
extern bool     ExtDrawPoints     = False;
extern bool     ExtDrawMiddleLine = False;
extern bool     ExtDeleteObject   = False;

double ExtMapBuffer1[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
  SetIndexStyle(  0, DRAW_ARROW, EMPTY, 1, indicator_color1 );
  SetIndexArrow(  0, 251 );
  SetIndexBuffer( 0, ExtMapBuffer1 );
  SetIndexEmptyValue( 0, 0.0 );

  return ( 0 );
}

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int deinit()
{
  if ( ExtDeleteObject )
    DelObj();
  
  return ( 0 );
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  static bool bGettingFromFile = False;
  
  string sFileName;
  string sIdentChannel; // èäåíòèôèêàòîð êàíàëà - äëÿ óäîáñòâà - íè íà ÷òî íå âëèÿåò
  int    iFileHandle;
  int    i;
  
  if ( ExtGetFromFile ) { // äàííûå áåðóòñÿ èç ôàéëà
    
    if ( ExtRegetFromFile ) // íàäî ïåðå÷èòûâàòü äàííûå
      DelObj(); // ïðèíóäèòåëüíîå óäàëåíèå âñåõ èìåþùèõñÿ êàíàëîâ
      
    else { // íå íàäî ïåðå÷èòûâàòü äàííûå
      if ( bGettingFromFile  ) // äàííûå óæå áûëè ñ÷èòàíû
        return ( 0 );
      
    } // íå íàäî ïåðå÷èòûâàòü äàííûå
    
    sFileName   = Symbol() + ".txt";
    iFileHandle = FileOpen( sFileName, FILE_READ );
    
    if ( iFileHandle < 1 ) {
      Print( "Îøèáêà îòêðûòèÿ ôàéëà " + sFileName + " ", GetLastError() );
      return ( -1 );
    } // if
    
    for ( i = 1; i < 10; i++ ) {
    
      if ( FileIsEnding( iFileHandle ) ) {
        Print( "Êîíåö ôàéëà" );
        break;
      } // if
      
      //=== Ñ÷èòûâàíèå äàííûõ òåêóùåãî êàíàëà
      sIdentChannel = FileReadString( iFileHandle );
      ExtTimeLeft   = StrToTime(  FileReadString( iFileHandle ) );
      ExtTimeMiddle = StrToTime(  FileReadString( iFileHandle ) );
      ExtTimeRight  = StrToTime(  FileReadString( iFileHandle ) );
      ExtColor      = StrToColor( FileReadString( iFileHandle ) );
      
      Print( sIdentChannel );
      /*Print( "ExtTimeLeft= ", TimeToStr( ExtTimeLeft, TIME_DATE|TIME_MINUTES ) );
      Print( "ExtTimeMiddle= ", TimeToStr( ExtTimeMiddle, TIME_DATE|TIME_MINUTES ) );
      Print( "ExtTimeRight= ", TimeToStr( ExtTimeRight, TIME_DATE|TIME_MINUTES ) );*/
      Print( "Ñ÷èòàí ", i, "-é êàíàë" );
      
      DrawLines(); // ðèñóåòñÿ òåêóùèé êàíàë
      
    } // for
    
    Print( "Ñ÷èòàíî êàíàëîâ: ", i-1 );
    
    bGettingFromFile = True;
    
    FileClose( iFileHandle );
  } // if ( äàííûå áåðóòñÿ èç ôàéëà
  
  else { // äàííûå áåðóòñÿ èç íàñòðîéêè
    DrawLines(); // êàíàë ðèñóåòñÿ îäèí ðàç
  } // else
  
  return ( 0 );
} // int start()
  
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int DrawLines()
{
  int    iNumBarLeft;     // íîìåð ëåâîãî áàðà 
  int    iNumBarMiddle;   // íîìåð ñðåäíåãî áàðà
  int    iNumBarRight;    // íîìåð ïðàâîãî áàðà
  double dPriceLeft;      // öåíà ëåâîãî áàðà
  double dPriceMiddle;    // öåíà ñðåäíåãî áàðà
  double dPriceRight;     // öåíà ïðàâîãî áàðà
  double dDrawPriceRight; // öåíû íà îïîðíûõ áàðàõ
  double dDrawPriceLeft;  //   äëÿ ëèíèè ÷åðåç 3-þ òî÷êó
  double dPriceDelta;     // øàã öåíû îäíîãî áàðà ìåæäó ëåâûì è ïðàâûì áàðàìè
  string sNameObject;
  
  //=== Âû÷èñëÿåì íîìåðà áàðîâ
  iNumBarLeft   = iBarShift( NULL, 0, ExtTimeLeft  , True );
  iNumBarMiddle = iBarShift( NULL, 0, ExtTimeMiddle, True );
  iNumBarRight  = iBarShift( NULL, 0, ExtTimeRight , True );
  
  if ( iNumBarLeft   < 0 ) { Print( "Îøèáêà çàäàíèÿ ëåâîé äàòû"  , ExtTimeLeft   ); return ( -1 ); }
  if ( iNumBarMiddle < 0 ) { Print( "Îøèáêà çàäàíèÿ ñðåäíåé äàòû", ExtTimeMiddle ); return ( -1 ); }
  if ( iNumBarRight  < 0 ) { Print( "Îøèáêà çàäàíèÿ ïðàâîé äàòû" , ExtTimeRight  ); return ( -1 ); }
  
  if ( High[ iNumBarLeft  ] > Low[ iNumBarMiddle ] &&
       High[ iNumBarRight ] > Low[ iNumBarMiddle ] ) { // îïîðíàÿ ëèíèÿ ñâåðõó
    dPriceLeft   = High[ iNumBarLeft   ];
    dPriceMiddle = Low[  iNumBarMiddle ];
    dPriceRight  = High[ iNumBarRight  ];
  } // if ( îïîðíàÿ ëèíèÿ ñâåðõó
  
  if ( Low[ iNumBarLeft  ] < High[ iNumBarMiddle ] &&
       Low[ iNumBarRight ] < High[ iNumBarMiddle ] ) { // îïîðíàÿ ëèíèÿ ñíèçó
    dPriceLeft   = Low[  iNumBarLeft   ];
    dPriceMiddle = High[ iNumBarMiddle ];
    dPriceRight  = Low[  iNumBarRight  ];
  } // if ( îïîðíàÿ ëèíèÿ ñíèçó
  
  if ( ExtDrawPoints ) { // ðèñîâàòü òî÷êè ïðèâÿçêè
    if ( dPriceLeft > dPriceMiddle ) { // áàçîâàÿ ëèíèÿ ñâåðõó
      ExtMapBuffer1[ iNumBarLeft   ] = dPriceLeft   + 5 * Point;
      ExtMapBuffer1[ iNumBarMiddle ] = dPriceMiddle - 5 * Point;
      ExtMapBuffer1[ iNumBarRight  ] = dPriceRight  + 5 * Point;
    } // áàçîâàÿ ëèíèÿ ñâåðõó
    
    else { // áàçîâàÿ ëèíèÿ ñíèçó
      ExtMapBuffer1[ iNumBarLeft   ] = dPriceLeft   - 5 * Point;
      ExtMapBuffer1[ iNumBarMiddle ] = dPriceMiddle + 5 * Point;
      ExtMapBuffer1[ iNumBarRight  ] = dPriceRight  - 5 * Point;
    } // áàçîâàÿ ëèíèÿ ñíèçó
    
  } // if ( ðèñîâàòü òî÷êè ïðèâÿçêè
  
  //=== Âû÷èñëÿåì øàã (åñëè îí ïîëîæèòåëüíûé, òî êàíàë íèñõîäÿùèé)
  dPriceDelta = ( dPriceLeft - dPriceRight ) / ( iNumBarLeft - iNumBarRight );
  
  //    Êîîðäèíàòû ïî øêàëå öåíû äëÿ ëèíèè ÷åðåç 3-þ òî÷êó
  dDrawPriceRight = dPriceMiddle - dPriceDelta * ( iNumBarMiddle - iNumBarRight  );
  dDrawPriceLeft  = dPriceMiddle + dPriceDelta * ( iNumBarLeft   - iNumBarMiddle );
  
  //=== Ðèñóåì ëèíèè êàíàëà
  //    Îïîðíàÿ ëèíèÿ
  sNameObject = "BaseLine" + ExtTimeLeft;
  ObjectCreate( sNameObject, OBJ_TREND, 0,
                ExtTimeLeft , dPriceLeft,
                ExtTimeRight, dPriceRight );
  ObjectSet(    sNameObject, OBJPROP_COLOR, ExtColor );
  ObjectSet(    sNameObject, OBJPROP_WIDTH, 0 );
  ObjectSet(    sNameObject, OBJPROP_STYLE, STYLE_DASH );
  
  //    Ëèíèÿ ÷åðåç 3-þ òî÷êó
  sNameObject = "Line3" + ExtTimeLeft;
  ObjectCreate( sNameObject, OBJ_TREND, 0,
                ExtTimeLeft , dDrawPriceLeft,
                ExtTimeRight, dDrawPriceRight );
  ObjectSet(    sNameObject, OBJPROP_COLOR, ExtColor );
  ObjectSet(    sNameObject, OBJPROP_WIDTH, 0 );
  ObjectSet(    sNameObject, OBJPROP_STYLE, STYLE_DASH );
  
  //    Ñðåäíÿÿ ëèíèÿ
  if ( ExtDrawMiddleLine ) {
    sNameObject = "MidLine" + ExtTimeLeft;
    ObjectCreate( sNameObject, OBJ_TREND, 0, 
                  ExtTimeLeft , ( dPriceLeft  + dDrawPriceLeft  )/2,
                  ExtTimeRight, ( dPriceRight + dDrawPriceRight )/2 );
    ObjectSet(    sNameObject, OBJPROP_COLOR, ExtColor );
    ObjectSet(    sNameObject, OBJPROP_WIDTH, 0 );
    ObjectSet(    sNameObject, OBJPROP_STYLE, STYLE_DASHDOTDOT );
  }
  
  return ( 0 );
} // int DrawLines()

//+------------------------------------------------------------------+
//| Óäàëåíèå îáúåêòîâ.
//+------------------------------------------------------------------+
void DelObj()
{
  string sNameObject;
  int    iiObject;
  
  for ( iiObject = ObjectsTotal(); iiObject >= 0; iiObject-- ) {
    sNameObject = ObjectName( iiObject );
    if ( StringFind( sNameObject, "BaseLine" ) > -1 ) ObjectDelete ( sNameObject );
    if ( StringFind( sNameObject, "Line3"    ) > -1 ) ObjectDelete ( sNameObject );
    if ( StringFind( sNameObject, "MidLine"  ) > -1 ) ObjectDelete ( sNameObject );
  } // for
  
} // void DelObj()

//+------------------------------------------------------------------+
//| Öâåòà
//+------------------------------------------------------------------+
color StrToColor( string sColor )
{
  if      ( sColor == "Black"   ) return ( Black   );
  else if ( sColor == "Green"   ) return ( Green   );
  else if ( sColor == "Purple"  ) return ( Purple  );
  else if ( sColor == "Maroon"  ) return ( Maroon  );
  else if ( sColor == "Brown"   ) return ( Brown   );
  else if ( sColor == "Orange"  ) return ( Orange  );
  else if ( sColor == "Gold"    ) return ( Gold    );
  else if ( sColor == "Yellow"  ) return ( Yellow  );
  else if ( sColor == "Lime"    ) return ( Lime    );
  else if ( sColor == "Aqua"    ) return ( Aqua    );
  else if ( sColor == "Blue"    ) return ( Blue    );
  else if ( sColor == "Magenta" ) return ( Magenta );
  else if ( sColor == "Red"     ) return ( Red     );
  else if ( sColor == "Gray"    ) return ( Gray    );
  else if ( sColor == "Silver"  ) return ( Silver  );
  else if ( sColor == "Pink"    ) return ( Pink    );
  else if ( sColor == "Beige"   ) return ( Beige   );
  else if ( sColor == "White"   ) return ( White   );
  else 
    return ( Lime );
    
} // color StrToColor()





Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:

Implements a curve of type DRAW_ARROW


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

Uses files from the file system
It reads information from a file