매우 유용한 지표 - 페이지 3

 
Vitalii Ananev :

Quik과 비슷한 것이 있습니까?

아니요, QUICK의 경우 전문가만 작성한 다음 Delphi에서 작성합니다.

 
prostotrader :

아니요, QUICK의 경우 전문가만 작성한 다음 Delphi에서 작성합니다.

불쌍해. 내 중개인은 퀵만 있습니다. 여기에서 나는 루아를 다루려고 노력하고 있지만 MT 이후 내 영혼은 루아와 거짓말을하지 않습니다. 언뜻보기에는 모든 것이 혼란스럽고 복잡합니다. 그리고 주석과 함께 정상적인 예를 찾을 수 없습니다.

 
prostotrader :

당신이 거래하려는 것 - 그냥 짜증납니다.

정말 멋진 그래픽 :)

나는 이 쓰레기로 인터넷 서핑을 하는 것이 일정을 지키는 것보다 낫습니다. 더 많은 이점이 있습니다.

 
Vitalii Ananev :

불쌍해. 내 중개인은 퀵만 있습니다. 여기에서 나는 루아를 다루려고 노력하고 있지만 MT 이후 내 영혼은 루아와 거짓말을하지 않습니다. 언뜻보기에는 모든 것이 혼란스럽고 복잡합니다. 그리고 주석과 함께 정상적인 예를 찾을 수 없습니다.

최악은 이게 아니라 정상적인 디버거가 없다는 사실,

그래서 큰 것은 전혀 테스트할 수 없습니다!

 
__zeus__ :

나는 이 쓰레기로 인터넷 서핑을 하는 것이 일정을 지키는 것보다 낫습니다. 더 많은 이점이 있습니다.

나는 이미 당신에게 말했습니다 - 당신이 좋아하는 것을하십시오.

 
prostotrader :

최악은 이게 아니라 정상적인 디버거가 없다는 사실,

그래서 큰 것은 전혀 테스트할 수 없습니다!

네, 그것도 짜증납니다. DDE에 데이터 내보내기가 있음을 보았습니다. 설정에서 DDE 서버를 지정하도록 작성되었습니다. 내가 본 예제의 모든 곳에서 Excel을 사용합니다. 단지 용어에 오류가 있는 것인지 아니면 사실인지 이해가 되지 않습니다. Excel은 DDE 서버 로 지정되어야 하지만 이론상 Excel DDE 클라이언트와 Quick DDE 서버의 반대 방향이어야 한다고 생각합니다. 데이터는 Quick에서 Excel로 전송되며 그 반대로는 전송되지 않습니다.

 

다음은 유용한 지표입니다.

그리고 이제 이 TS는 작동하지만(통화는 변동성이 높음)

불행히도 데모 만 .

MT5에 큰 지연이 있다는 사실로 인해, 이 TC(synthetic Eu)

본질적으로 100% 수익성이 있지만 수익성이 없습니다.

Eu(자연) = Si * ED

누가 "놀이"할 수 있습니까?

나는 그들 중 100명이 이제 Plaza 2에 "앉아" 있다고 상상합니다(지연 없음)!

 //+------------------------------------------------------------------+
//|                                                     Eu_ED_Si.mq5 |
//|                                          Copyright 2015, Mikalas |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015"
#property link        "http://www.mql5.com"
#property version    "1.01"
#define on_call - 1111
//
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_plots    2

//--- plot Label1
#property indicator_label1    "Ask"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1

//--- plot Label1
#property indicator_label2    "Bid"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrRoyalBlue
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- Levels
#property indicator_level1 0
#property indicator_level2 0
#property indicator_level3 0
#property indicator_level4 0

//---
#property indicator_levelwidth 1
//---
#property indicator_levelstyle STYLE_DOT
//
string ed_symbol;
string si_symbol;
string symb_info;
string eu_b_name;
string si_b_name;
string ed_b_name;
//
input long    LevUp     = 100 ;   //Макс. уровень индикатора
input long    LevDown   = - 100 ;   //Мин. уровень индикатора
input long    Comis     = 8 ;     //Комиссии (пункты)  
input long    LevelHigh = 15 ;   //Линия верхнего уровня (пункты)  
input long    LevelLow  = - 15 ;   //Линия нижнего уровня (пункты)  
input long    EntHigh   = 20 ;   //Вхрод вверху (пункты)
input long    ExitHigh  = 5 ;     //Выход вверху (пункты)
input long    EntLow    = - 20 ;   //Вход внизу (пункты)
input long    ExitLow   = - 5 ;   //Выход внизу (пункты)

//--- indicator buffers
double AskBuffer[];
double BidBuffer[];
double eu_sell_price, eu_buy_price,
       ed_sell_price, ed_buy_price,
       si_sell_price, si_buy_price;
double max_value, min_value;   
double si_point, eu_point, ed_point;    
//
int event_cnt;
bool eu_book;
bool si_book;
bool ed_book;
//
enum EXP_STATE
{
  POS_NONE = 0 ,
  POS_HIGH = 1 ,
  POS_LOW  = 2
};
struct MEM_PRICES
{
   double eu_price;
   double ed_price;
   double si_price;
};

EXP_STATE exp_state;
MEM_PRICES mem_prices;
long profit;
//+------------------------------------------------------------------+
//| Indicator Set second Symbols function                            |
//+------------------------------------------------------------------+
void SetSecondSymbols( const string aSymbol, string &s_info )
{
   int str_size = StringLen ( aSymbol );
    
   for ( int i = 0 ; i < str_size; i++ )
  {
     ushort let_symbol = StringGetCharacter ( aSymbol, i );
     if ( let_symbol == '-' )
    {
       string hvost = StringSubstr ( aSymbol, i, str_size - i );
      s_info = StringSubstr ( aSymbol, 0 , i );
      
       if ( s_info == "Eu" )
      {
        si_symbol = "Si" + hvost;
        ed_symbol = "ED" + hvost;
      }
       break ;
    }
  }
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
  profit = 0 ;
  exp_state = POS_NONE;
  max_value = - DBL_MAX ;
  min_value = DBL_MAX ;
  eu_book = 0 ;
  si_book = 0 ;
  ed_book = 0 ;
  event_cnt = 0 ;
  SetSecondSymbols( Symbol (), symb_info);
   if (symb_info != "Eu" )
  {
     Print ( "Индикатор должен быть только на символе 'Eu'!" );
     return ( INIT_FAILED );
  }
//---
   if (! SymbolSelect (ed_symbol, true ))
  {
     Print ( "Нет сивола 'ED'!" );
     return ( INIT_FAILED );
  }
   if (! SymbolSelect (si_symbol, true ))
  {
     Print ( "Нет сивола 'Si'!" );
     return ( INIT_FAILED );
  }  
//---
  eu_point = Point ();
  ed_point = SymbolInfoDouble (ed_symbol, SYMBOL_POINT );
  si_point = SymbolInfoDouble (si_symbol, SYMBOL_POINT );  
//--- Add book
  eu_book = MarketBookAdd ( Symbol ());
   if (eu_book == false )
  {
     Print ( "Стакан символа " + Symbol () + " не добавден!" );
     return ( INIT_FAILED );
  }
  ed_book = MarketBookAdd (ed_symbol);
   if (ed_book == false )
  {
     Print ( "Стакан символа " + ed_symbol + " не добавден!" );
     return ( INIT_FAILED );
  }
  si_book = MarketBookAdd (si_symbol);
   if (si_book == false )
  {
     Print ( "Стакан символа " + si_symbol + " не добавден!" );
     return ( INIT_FAILED );
  }
//---  
   IndicatorSetInteger ( INDICATOR_DIGITS , Digits () );
   IndicatorSetString ( INDICATOR_SHORTNAME , "Eu_Ask_Bid" );
//---  
   SetIndexBuffer ( 0 , AskBuffer, INDICATOR_DATA );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries ( AskBuffer, true );
//---
   SetIndexBuffer ( 1 , BidBuffer, INDICATOR_DATA );
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries ( BidBuffer, true );
//---
   IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 0 , clrAqua );
   IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 1 , clrAqua );
   IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 2 , clrRed );
   IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 3 , clrRoyalBlue ); 
//---
   IndicatorSetDouble ( INDICATOR_LEVELVALUE , 0 , LevelHigh);
//  IndicatorSetDouble( INDICATOR_LEVELVALUE, 1, LevelExitHigh );
   IndicatorSetDouble ( INDICATOR_LEVELVALUE , 1 , LevelLow);

   IndicatorSetDouble ( INDICATOR_MAXIMUM , LevUp);
   IndicatorSetDouble ( INDICATOR_MINIMUM , LevDown);
//---
   //---Set objects
   int window= ChartWindowFind ( ChartID (), "Eu_Ask_Bid" );
   ObjectCreate ( ChartID (), "Eu_label_1" , OBJ_LABEL ,window, 0 , 0 );
   ObjectSetInteger ( ChartID (), "Eu_label_1" , OBJPROP_YDISTANCE , 20 );
   ObjectSetInteger ( ChartID (), "Eu_label_1" , OBJPROP_XDISTANCE , 0 );
   ObjectSetInteger ( ChartID (), "Eu_label_1" , OBJPROP_COLOR , clrWhite );
   ObjectSetString ( ChartID (), "Eu_label_1" , OBJPROP_TEXT , "Position: " + EnumToString (exp_state));
   ObjectCreate ( ChartID (), "Eu_label_2" , OBJ_LABEL ,window, 0 , 0 );
   ObjectSetInteger ( ChartID (), "Eu_label_2" , OBJPROP_YDISTANCE , 40 );
   ObjectSetInteger ( ChartID (), "Eu_label_2" , OBJPROP_XDISTANCE , 0 );
   ObjectSetInteger ( ChartID (), "Eu_label_2" , OBJPROP_COLOR , clrLime );
   ObjectSetString ( ChartID (), "Eu_label_2" , OBJPROP_TEXT , "Profit: " + string (profit) + " points" );
//---
   ChartRedraw ();
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
// Custom indicator DeInit function                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason )
{
   ObjectDelete ( ChartID (), "Eu_label_1" );
   ObjectDelete ( ChartID (), "Eu_label_2" );
//---  
 if (eu_book == true ) MarketBookRelease ( Symbol ());
 if (ed_book == true ) MarketBookRelease (ed_symbol);
 if (si_book == true ) MarketBookRelease (si_symbol);
//---  
   if (reason == REASON_INITFAILED )
  {
     Print ( "Индикатор удалён! Причина - ошибка инициализации." );
     string short_name = ChartIndicatorName ( ChartID (), 1 , 0 );
     ChartIndicatorDelete ( ChartID (), 1 , short_name); 
  }
}
//+------------------------------------------------------------------+
// Custom indicator On book event function                           |
//+------------------------------------------------------------------+
void OnBookEvent ( const string & a_symbol )
{
   if ((a_symbol == Symbol ()) || (a_symbol == ed_symbol) || (a_symbol == si_symbol))
  {
    eu_sell_price = SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
    eu_buy_price = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
    ed_sell_price = SymbolInfoDouble (ed_symbol, SYMBOL_ASK );
    ed_buy_price = SymbolInfoDouble (ed_symbol, SYMBOL_BID );
    si_sell_price = SymbolInfoDouble (si_symbol, SYMBOL_ASK );
    si_buy_price = SymbolInfoDouble (si_symbol, SYMBOL_BID );
//---
     double price[]; 
     OnCalculate ( event_cnt, event_cnt, on_call, price ); 
  }
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[] )

{
   if (prev_calculated == 0 )
  {
     ArrayInitialize (AskBuffer, EMPTY_VALUE );
     ArrayInitialize (BidBuffer, EMPTY_VALUE ); 
  }
   else
  {
     if (begin == on_call)
    {
       for ( int i = rates_total - 1 ; i > 0 ; i--)
      {
        AskBuffer[i] = AskBuffer[i - 1 ];
        BidBuffer[i] = BidBuffer[i - 1 ];
      }
    }
     if ((ed_sell_price > 0 ) && (si_sell_price > 0 ) && (eu_sell_price > 0 ) &&
       (ed_buy_price > 0 ) && (si_buy_price > 0 ) && (eu_buy_price > 0 ))
    {
      AskBuffer[ 0 ] = ed_sell_price * si_sell_price - eu_buy_price;
      BidBuffer[ 0 ] = ed_buy_price * si_buy_price - eu_sell_price;
       if ( AskBuffer[ 0 ] < min_value ) min_value = AskBuffer[ 0 ];
       if ( BidBuffer[ 0 ] > max_value ) max_value = BidBuffer[ 0 ];
       IndicatorSetDouble ( INDICATOR_LEVELVALUE , 2 , min_value);
       IndicatorSetDouble ( INDICATOR_LEVELVALUE , 3 , max_value);
       switch (exp_state)
      {
         case POS_NONE:
           if (BidBuffer[ 0 ] >= (EntHigh * Point ()))
          {
            mem_prices.eu_price = eu_sell_price;
            mem_prices.ed_price = ed_buy_price;
            mem_prices.si_price = si_buy_price;
            exp_state = POS_HIGH;
          }
           else
           if (AskBuffer[ 0 ] <= (EntLow * Point ()))
          {
            mem_prices.eu_price = eu_buy_price;
            mem_prices.ed_price = ed_sell_price;
            mem_prices.si_price = si_sell_price;
            exp_state = POS_LOW;
          }
         break ;
         case POS_HIGH:
           if (AskBuffer[ 0 ] <= (ExitHigh * Point ()))
          {
            profit += long ((eu_buy_price - mem_prices.eu_price)/eu_point + (ed_sell_price - mem_prices.ed_price)/ed_point + (si_sell_price - mem_prices.si_price)/si_point) - Comis;
            exp_state = POS_NONE;
          }
         break ;
         case POS_LOW:
           if (BidBuffer[ 0 ] >= (ExitLow * Point ()))
          {
            profit += long ((mem_prices.eu_price - eu_buy_price)/eu_point + (mem_prices.ed_price - ed_sell_price)/ed_point + (mem_prices.si_price - si_sell_price)/si_point) - Comis;
            exp_state = POS_NONE;
          }
         break ;
      }
    }
     else
    {
      AskBuffer[ 0 ] = AskBuffer[ 1 ];
      BidBuffer[ 0 ] = BidBuffer[ 1 ];
    }
  }
   ObjectSetString ( ChartID (), "Eu_label_1" , OBJPROP_TEXT , "Position: " + EnumToString (exp_state));
   ObjectSetString ( ChartID (), "Eu_label_2" , OBJPROP_TEXT , "Profit: " + string (profit) + " points" );
//---
   ChartRedraw ();
  event_cnt = rates_total; 
   return (rates_total);
}

//+------------------------------------------------------------------+
 
prostotrader :

다음은 유용한 지표입니다.

그리고 이제 이 TS는 작동하지만(통화는 변동성이 높음)

불행히도 데모 만.

MT5에 큰 지연이 있다는 사실로 인해, 이 TC(synthetic Eu)

본질적으로 100% 수익성이 있지만 수익성이 없습니다.

Eu(자연) = Si * ED

누가 "놀이"할 수 있습니까?

나는 그들 중 100명이 이제 Plaza 2에 "앉아" 있다고 상상합니다(지연 없음)!

고맙습니다 ! 물론 작동하려면 무엇이 필요합니까?
 
Alexsandr San :
고맙습니다 ! 물론 작동하려면 무엇이 필요합니까?

빠른 작업 MT5.

글쎄, 전문가를 작성하십시오 (이 지표는 전문가이지만 주문하지 않은 경우에만)

시뮬레이션 모드 에서 실생활 에서 작동합니다.

Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
 
prostotrader :

빠른 작업 MT5.

글쎄, 전문가를 작성하십시오 (이 지표는 전문가이지만 주문하지 않은 경우에만)

시뮬레이션 모드 에서 실생활 에서 작동합니다.

죄송합니다! 어떤 종류의 기호(지표는 기호 'Eu'에만 있어야 합니다!) ?

스냅 사진