MQL 전문가를 위한 질문 - 페이지 2

 
 
여러분, 정말 감사합니다. 어떤 것이 맞는지 볼게요. 빌어먹을 봄....
 

아마도 잘못된 질문에 대해 사과드립니다!

이제 디컴파일된 Expert Advisor의 코드를 알아내고 있습니다. 코드 조각을 알아낼 수 없습니다.

 //-----------------------------------------------------------      
int TotalSell () {    int count = 0 ;
   for ( int i = 0 ; i < OrdersTotal () ; i ++ ) {
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) break ;
       if ( OrderSymbol () != Symbol ()) continue ;
       if ( OrderType () == OP_SELL ) count ++; } return ( count ) ; }
//------------------------------------------------------------      
int TotalSellStop () { int count = 0 ;
   for ( int i = 0 ; i < OrdersTotal () ; i ++ ){
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) break ;
       if ( OrderSymbol () != Symbol ()) continue ;
       if ( OrderType () == OP_SELLSTOP ) count ++; } return ( count ) ; }
//-------------------------------------------------------------------

누가 나를 위해이 이해할 수없는 (상단 또는 하단) 구성을 (러시아어 버전으로) 한 줄씩 해독 할 수 있습니까?

이 Expert Advisor의 일반적인 "개념"을 파악했습니다. 처음에는 두 가지 지연이 설정됩니다 - 바이 스톱 및 셀 스톱. 지연을 트리거한 후 두 번째 지연이 제거됩니다. 그러나 동시에 후행이 열린 위치 에 배치되고 손절매 대신 반대 지연이 가격을 따릅니다!

 
//-----------------------------------------------------------      
int TotalSell () {    int count = 0 ;                                    //Функция возвращающая количество устаноавленныых SELL ордеров 
   for ( int i = 0 ; i < OrdersTotal () ; i ++ ) {                           //задается цикл от ноля до общего количества всех ордеров 
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) break ;        //Выбирается ордер по позиции из списка, если не выбран - выход
       if ( OrderSymbol () != Symbol ()) continue ;                       //Сравнивается по символу, если соответствует - продолжить 
       if ( OrderType () == OP_SELL ) count ++; } return ( count ) ; }          //Сравнивается по типу SELL, если соответствует то увеличивает счетчик ордеров на 1
//------------------------------------------------------------      
int TotalSellStop () { int count = 0 ;                                 //Тоже что и предидущая функция но для SELLSTOP ордеров
   for ( int i = 0 ; i < OrdersTotal () ; i ++ ){
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) break ;
       if ( OrderSymbol () != Symbol ()) continue ;
       if ( OrderType () == OP_SELLSTOP ) count ++; } return ( count ) ; }
//-------------------------------------------------------------------

그게 다야

 
 

모두 좋은 저녁! 여기에 필요가 있습니다.

열린 위치 를 되돌리는 스크립트를 활성화하십시오.

놀랍게도, 나는 스크립트가 어떤 이유로 작동하지 않는다는 것을 발견했습니다! 알아내려고 했는데 ....안되네요.

예, 거기에서도 분명히 - 디자인의 지나치게 재치있는 작성자가 잡혔습니다 ..., 삽입 된 멍청한 주석.

 / Развернуть все ордера. mq4
// Скрипт
#property copyright " mandorr@gmail.com "
#include < WinUser32 . mqh >
void start ()
{
   int i = 0 , count = 0 ;
   //закладываем массивы значений
   int cmd [] ;
   int ticket [] ;
   double lots [] ;
   string symbol [] ;
   string type [] ;
//------------------------------------------------------------   
   for ( i = 0 ; i < OrdersTotal () ; i ++ )            {
       if ( ! OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) break ;
       if ( OrderType () == OP_BUY || OrderType () == OP_SELL )        {
         ArrayResize ( cmd , count + 1 ) ; 
         ArrayResize ( ticket , count + 1 ) ; 
         ArrayResize ( lots , count + 1 ) ; 
         ArrayResize ( symbol , count + 1 ) ; 
         ArrayResize ( type , count + 1 ) ; 
         cmd [ count ] = OrderType () ;
         ticket [ count ] = OrderTicket () ;
         lots [ count ] = OrderLots () ;
         symbol [ count ] = OrderSymbol () ;
         if ( OrderType () == OP_BUY ) type [ count ] = " Buy " ; //если открыта длинная позиция
         // заносим её в массив "Buy"
         else type [ count ] = " Sell " ; // иначе в массив "Sell"
         count ++;                                             }
   }
//---------------------------------------------------------------   
   string space = "      " ;
   string title = " Кароче_В_натуре " ;
   string msg = " Развернуть: " + " \n " ;
   for ( i = 0 ; i < count ; i ++ ) msg = msg + " \n " + " Order " + ticket [ i ] + " " + type [ i ] + " " + DoubleToStr ( lots [ i ] , 1 ) + " Lots " + symbol [ i ] + space ;
   if ( MessageBox ( msg , title , MB_YESNO | MB_ICONQUESTION ) != IDYES )
   {
       title = " Аха " ;
       string ends = "" ; if ( count > 1 ) ends = " и " ;
       msg = " Ну и хрен с ним " + ends + " ...     " ; 
       MessageBox ( msg , title , MB_OK | MB_ICONEXCLAMATION ) ;
       return ;
   }
   for ( i = 0 ; i < count ; i ++ )
   {
       if ( ! OrderSelect ( ticket [ i ] , SELECT_BY_TICKET )) continue ;
       double ask = MarketInfo ( symbol [ i ] , MODE_ASK ) ;
       double bid = MarketInfo ( symbol [ i ] , MODE_BID ) ;
       int slippage = 3 ;
       if ( cmd [ i ] == OP_BUY )
       {
         OrderClose ( ticket [ i ] , lots [ i ] , bid , slippage ) ;
         OrderSend ( symbol [ i ] , OP_SELL , lots [ i ] , bid , slippage , 0 , 0 , NULL , 0 , 0 ) ;
       }
       if ( cmd [ i ] == OP_SELL )
       {
         OrderClose ( ticket [ i ] , lots [ i ] , ask , slippage ) ;
         OrderSend ( symbol [ i ] , OP_BUY , lots [ i ] , ask , slippage , 0 , 0 , NULL , 0 , 0 ) ;
       }
   }
}
// End
작동하지 않는 이유를 알려주세요.
 
// Развернуть все ордера.mq4
이상하게도 모든 것이 작동하지만 이렇게 하는 것도 나쁘지 않습니다.
 

네, 그게 핵심이 아닙니다. 차트에서 스크립트를 꺼냅니다(Alpari-demo). 나타난 창에서 "확장하시겠습니까?" 나는 책을 누른다 "예"하지만 아무 일도 일어나지 않습니다. 위치는 반전되지 않습니다. 그리고 눌렀을 때의 로그에 비문이 나타납니다.

2008.04.29 01:15:41 스크립트 리버스__all_orders EURJPY,M15: 제거됨

 

안녕하세요. 제발. 이 표시기에 대한 iCustom 표현식 작성:



그의 코드는 다음과 같습니다.

 #property indicator_chart_window
#property indicator_buffers 2

//---- input parameters
extern int R = 3 ;
//---- buffers
double HighBuffer [] ;
double LowBuffer [] ;
double VALUE1 , VALUE2 , VALUE11 , VALUE22 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ()
   {
   string short_name ;
//---- indicator line
   SetIndexStyle ( 0 , DRAW_ARROW , EMPTY , 1 , Blue ) ;
   SetIndexStyle ( 1 , DRAW_ARROW , EMPTY , 1 , Yellow ) ;
   SetIndexArrow ( 0 , 0x9F ) ;
   SetIndexArrow ( 1 , 0x9F ) ;

   SetIndexBuffer ( 0 , HighBuffer ) ;
   SetIndexBuffer ( 1 , LowBuffer ) ;

   SetIndexEmptyValue ( 0 , 0 ) ;
   SetIndexEmptyValue ( 1 , 0 ) ;
//---- name for DataWindow and indicator subwindow label
   short_name = " HiLo " ;
   IndicatorShortName ( short_name ) ;
   SetIndexLabel ( 0 , short_name ) ;
//----
   SetIndexDrawBegin ( 0 , 10 ) ;
   SetIndexDrawBegin ( 1 , 10 ) ;
//----
   return ( 0 ) ;
   }
//+-----------------------------------------------------+
int deinit ()
   {
//---- TODO: add your code here
ObjectsDeleteAll ( 0 ) ;   
//----
   return ( 0 ) ;
   }
//+-------------------------------------------------------+
int start ()
   {
   int      counted_bars = IndicatorCounted () , i , shift , Swing ;   

//---- TODO: add your code here
i = ( Bars - counted_bars ) - 1 ;

for ( shift = i ; shift >= 0 ; shift -- )    {

VALUE1 = iMA ( NULL , 0 , R , 0 , MODE_SMA , PRICE_HIGH , shift + 1 ) ;
VALUE2 = iMA ( NULL , 0 , R , 0 , MODE_SMA , PRICE_LOW , shift + 1 ) ;

if ( Close [ shift + 1 ] < VALUE2 ) Swing =- 1 ;
if ( Close [ shift + 1 ] > VALUE1 ) Swing = 1 ;

if ( Swing == 1 ) { HighBuffer [ shift ] = VALUE2 ; LowBuffer [ shift ] = 0 ;   }
if ( Swing ==- 1 ) { LowBuffer [ shift ] = VALUE1 ; HighBuffer [ shift ] = 0 ; }
//----
}
   return ( 0 ) ;
   }
물론 "속성"과 막대 번호에서 R 매개 변수를 설정할 수 있습니다.
 

예, 다음과 같이 표시기의 이름이 hilo.mq4라고 가정하면 다음과 같습니다.

 extern int iR = 3 ;
extern int SignalBar = 1 ;
//.......
//---получение значения  HighBuffer
double buy =  iCustom ( NULL , 0 , " hilo " ,
                      
iR ,
                      
0 , // № буффера
                      SignalBar ) ; // № бара    

//---получение значения  LowBuffer
double sell =  iCustom ( NULL , 0 , " hilo " ,
                      
iR ,
                      
1 , // № буффера
                      SignalBar ) ; // № бара