MQL uzmanları için soru - sayfa 2

 
Bahar
 
Arkadaşlar çok teşekkür ederim bakalım hangisi olacak. lanet olası bahar....
 

Muhtemelen yanlış soru için özür dilerim!

Şimdi decompiled Expert Advisor'ın kodunu çözüyorum. Sadece bir kod parçası çözemiyorum -

 //-----------------------------------------------------------      
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 ) ; }
//-------------------------------------------------------------------

Lütfen, kim benim için bu anlaşılmaz (üst veya alt) yapıyı satır satır (Rusça versiyonunda) deşifre edebilir?

Bu Uzman Danışmanın genel "kavramını" anladım. Başlangıçta iki gecikme ayarlanır - duraklama ve satış durdurma. Gecikmelerden herhangi biri tetiklendikten sonra ikincisi kaldırılır. Ancak, aynı zamanda, açılan pozisyona bir takip yerleştirilir ve bir stoploss yerine, fiyatın tersi gecikme olur!

 
//-----------------------------------------------------------      
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 ) ; }
//-------------------------------------------------------------------

aslında hepsi bu

 
Teşekkürler xion !
 

Herkese iyi akşamlar! İşte ihtiyaç geliyor.

Açık pozisyonları tersine çeviren bir komut dosyasını etkinleştirin.

Sürprizime göre, senaryonun bir nedenden dolayı çalışmadığını buldum! Çözmeye çalıştım ama .... işe yaramıyor.

Evet, görünüşe göre, orada bile - tasarımın aşırı esprili bir yazarı yakalandı ..., eşlik eden moronik yorumlar ekledi.

 / Развернуть все ордера. 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
Lütfen bana neden işe yaramadığını söyle?
 
// Развернуть все ордера.mq4
Garip bir şekilde, her şey çalışıyor, ancak bunu yapmak kötü olmaz:
 

Evet, mesele bu değil. Grafikteki betiği çıkarıyorum (Alpari-demo). Görünen pencerede "Genişlet?" kitap basıyorum "EVET", ama hiçbir şey olmuyor. Pozisyonlar tersine çevrilmez. Ve günlükte basıldığında yazıt görünür

2008.04.29 01:15:41 Script Revers__all_orders EURJPY,M15: kaldırıldı

 

Tünaydın. Lütfen. bu gösterge için bir iCustom ifadesi yazın:



İşte onun kodu -

 #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 ) ;
   }
Böylece "özellikler" de R parametresini ve tabii ki bar numarasını ayarlayabilirsiniz.
 

Evet, bu şekilde, göstergenin adının hilo.mq4 olduğunu varsayarsak:

 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 ) ; // № бара