흥미로운 거래 아이디어가 있습니다. 코드(mql4)에서 오류를 찾는 데 도움을 주세요. - 페이지 16

 
Sergey Gritsay :
MT5 버전의 버그 수정

업데이트 감사합니다... mt5 일주일간 잘썼습니다... 1000부터 10%이상 세어보면... 여기 사진이요... 오늘은 100이상이였네요 조금 쓰다가... 이 업데이트된 버전을 살펴보고 mt4를 만화 cmilliona grid6 https://www.mql5.com/en/code/12971 와 결합하여 쌍으로 작동하는 방식을 보기로 결정했습니다...))

차트 CHFJPY, H1, 2016.03.18 12:21 UTC, MetaQuotes Software Corp., MetaTrader 5, 데모

Мультивалютный сеточник GRID 6 SYMBOLS
Мультивалютный сеточник GRID 6 SYMBOLS
  • 투표: 19
  • 2015.05.11
  • Vladimir Khlystov
  • www.mql5.com
Советник выставляет сети стоп-ордеров по нескольким инструментам, далее закрывает все при достижении указанной прибыли.
 
최신 버전-명확하게 작동합니다-핍 수 있습니다-손으로 닫을 때 같은 방향으로 열리고 일종의 지연이 필요합니다 ... 0보다 약간 더 많이 추적되기 시작했습니다. 2~4점, 바로 돌아간다면 ... 부채 생각-화살표는 오래 서있었는데 자리가 없다... 그래도 에 비하면 신호가 더 많이 나오기 시작했다. 이전 것들 - 글쎄, 맞아, 대략적인 계산 ... 글쎄, 똑같이, 이것이 최선의 선택입니다 ... 다시 감사합니다 ... 그 - 나머지는 침묵합니다 - 에이 에이, 다른 사람이 뭔가를 찾았습니다 ... 또는 그들은 그것을 징크스하고 싶지 않습니다 ...))
 
Сергей Криушин :
최신 버전-명확하게 작동합니다-핍 수 있습니다-손으로 닫을 때 같은 방향으로 열리고 일종의 지연이 필요합니다 ... 0보다 약간 더 많이 추적되기 시작했습니다. 2~4점, 바로 돌아간다면 ... 부채 생각-화살표는 오래 서있었는데 자리가 없다... 그래도 에 비하면 신호가 더 많이 나오기 시작했다. 이전 것들 - 글쎄, 맞아, 대략적인 계산 ... 글쎄, 똑같이, 이것이 최선의 선택입니다 ... 다시 감사합니다 ... 그 - 나머지는 침묵합니다 - 에이 에이, 다른 사람이 뭔가를 찾았습니다 ... 또는 그들은 그것을 징크스하고 싶지 않습니다 ...))
문자가 많으면 모든 문자를 계산할 때까지 속도가 느려집니다. 그리고 이론적으로 새로운 바가 도착할 때까지 열리지 않아야 합니다. 즉, 하나의 바에서 하나의 거래를 해야 합니다.
 

나는 이 전략의 신호를 Martin 고문과 함께 붙였습니다. 여기 2015년 1월부터 오늘까지의 결과가 있습니다.

EUR/USD:

USDCHF:

 
Sergey Gritsay :

나는 이 전략의 신호를 Martin 고문과 함께 붙였습니다. 여기 2015년 1월부터 오늘까지의 결과가 있습니다.

EUR/USD:

USDCHF:

https://www.mql5.com/ru/code/13315 의 MT5에도 좋은 Martin이 있습니다. 이는 마지막 손실 거래를 곱합니다... 그러나 손실이 있는 거래는 종종 2위를 얻습니다...
 //+------------------------------------------------------------------+
//| Виртуальный стоп                                                 |
//+------------------------------------------------------------------+
void PutLable( const string name= "" , datetime time= 0 , double price= 0 , const color clr= clrGreen )
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- Создаем метку
   if (! ObjectCreate ( 0 ,name, OBJ_ARROW_LEFT_PRICE , 0 ,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать левую ценовую метку! Код ошибки = " , GetLastError ());
       return ;
       //--- установим цвет метки
       ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,clr);
       //--- установим стиль окаймляющей линии
       ObjectSetInteger ( 0 ,name, OBJPROP_STYLE , STYLE_SOLID );
       //--- установим размер метки
       ObjectSetInteger ( 0 ,name, OBJPROP_WIDTH , 2 );
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isNewBar( string symbol, ENUM_TIMEFRAMES timeframe)
  {
//---- получим время появления текущего бара
   datetime TNew= datetime ( SeriesInfoInteger (symbol,timeframe, SERIES_LASTBAR_DATE ));
   datetime m_TOld= 0 ;
//--- проверка на появление нового бара
   if (TNew!=m_TOld && TNew)
     {
      m_TOld=TNew;
       //--- появился новый бар!
       return ( true );
       Print ( "Новый бар!" );
     }
//--- новых баров пока нет!
   return ( false );
  }
//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time= 0 ;
//--- текущее время
   datetime lastbar_time= SeriesInfoInteger ( Symbol (), Period (), SERIES_LASTBAR_DATE );

//--- если это первый вызов функции
   if (last_time== 0 )
     {
       //--- установим время и выйдем 
      last_time=lastbar_time;
       return ( false );
     }

//--- если время отличается
   if (last_time!=lastbar_time)
     {
       //--- запомним время и вернем true
      last_time=lastbar_time;
       return ( true );
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return ( false );
  }  
//+------------------------------------------------------------------+
//| Считаем лот в зависимости от полученного профита                 |
//+------------------------------------------------------------------+
double Volume ( void )
  {
   double lot=Lots;
//--- Получим доступ к истории
   HistorySelect ( 0 , TimeCurrent ());
//--- Сделки в истории
   int orders= HistoryDealsTotal ();
//--- Тикет последней сделки  
   ulong ticket= HistoryDealGetTicket (orders- 1 );
   if (ticket== 0 )
     {
       Print ( "Нет сделок в истории! " );
      lot=Lots;
     }
//--- Профит сделки
   double profit= HistoryDealGetDouble (ticket, DEAL_PROFIT );
//--- Лот сделки
   double lastlot= HistoryDealGetDouble (ticket, DEAL_VOLUME );
//--- Профит отрицательный
   if (profit< 0.0 )
     {
       //--- Увеличиваем следующий лот
      lot=lastlot*KLot;
       Print ( " Cделка закрыта по стопу! " );
     }
//--- Приводим лот к минимальному
   double maxvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   if (lot<maxvol)
      lot=maxvol;
//--- Если лот больше максимального то начальный лот
   if (lot>MaxLot)
      lot=Lots;
//--- Возвращаем торговый объем
   return (lot);
  }
//+------------------------------------------------------------------+
//| Смотрим тип последней закрытой сделки                            |
//+------------------------------------------------------------------+
int LastDealType( void )
  {
   int type= 0 ;
//--- Получим доступ к истории
   HistorySelect ( 0 , TimeCurrent ());
//--- Сделки в истории
   int orders= HistoryDealsTotal ();
//--- Тикет последней сделки  
   ulong ticket= HistoryDealGetTicket (orders- 1 );
//--- Нет сделок в истории
   if (ticket== 0 )
     {
       Print ( "Нет сделок в истории! " );
      type= 0 ;
     }
   if (ticket> 0 )
     {
       //--- Последняя сделка BUY 
       if ( HistoryDealGetInteger (ticket, DEAL_TYPE )== DEAL_TYPE_BUY )
        {
         type= 2 ;
        }
       //--- Последняя сделка SELL
       if ( HistoryDealGetInteger (ticket, DEAL_TYPE )== DEAL_TYPE_SELL )
        {
         type= 1 ;
        }
     }
//---
   return (type);
  }
Well Martin
Well Martin
  • 투표: 19
  • 2015.06.25
  • Andrew Kornishkin
  • www.mql5.com
Советник Well Martin на основе двух индикаторов: Bollinger Bands и ADX.
 
표시기를 RSI로 변환하려고 했습니다. 작동하지 않았습니다. 라이브러리와 일치하지 않는 것 같습니다...
 //+------------------------------------------------------------------+
ENUM_ORDER_TYPE Get_Signal( string symbol, int index)
  {
   double rsi_s[ 3 ];
   double rsi_f[ 3 ];
   double thv[ 1 ];
   ArrayInitialize (rsi_s, 0 );
   ArrayInitialize (rsi_f, 0 );
   ArrayInitialize (thv, 0 );

   if ( Bars (symbol,TF_ATR)<Period_ATR+ 1 ) return ( WRONG_VALUE );
   if ( Bars (symbol, PERIOD_CURRENT )<period_RSI_F+ 1 ) return ( WRONG_VALUE );

   if (IndicatorTrend==RSI)
     {
       if ( Bars (symbol, PERIOD_CURRENT )<period_RSI_S+ 1 ) return ( WRONG_VALUE );
       if (m_rsi_s[index]== INVALID_HANDLE || m_rsi_s[index]== 0 ){m_rsi_s[index]= iRSI (symbol, PERIOD_CURRENT ,period_RSI_S, PRICE_CLOSE ); return ( WRONG_VALUE );}
       int i= 0 ;
       do
        {
         if (i> Bars (symbol, PERIOD_CURRENT )) break ;

         if (rsi_s[ 1 ]> 100.0 )trend[index]= ORDER_TYPE_BUY ;
         if (rsi_s[ 1 ]<- 100.0 )trend[index]= ORDER_TYPE_SELL ;
         if (rsi_s[ 1 ]> 100.0   &&  rsi_s[ 0 ]< 100.0 )trend[index]= ORDER_TYPE_BUY ;
         if (rsi_s[ 1 ]<- 100.0 && rsi_s[ 0 ]>- 100.0 )trend[index]= ORDER_TYPE_SELL ;
         i++;
        }
       while (trend[index]== WRONG_VALUE && ! IsStopped ());
     }
   if (IndicatorTrend==THV4)
     {
       if (m_thv[index]== INVALID_HANDLE || m_thv[index]== 0 ){m_thv[index]= iCustom (symbol, PERIOD_CURRENT , "::Indicators\\THV4" ); return ( WRONG_VALUE );}
       if ( CopyBuffer (m_thv[index], 1 , 1 , 1 ,thv)< 1 ) return ( WRONG_VALUE );
       if (thv[ 0 ]== 1.0 )trend[index]= ORDER_TYPE_BUY ;
       if (thv[ 0 ]== 0.0 )trend[index]= ORDER_TYPE_SELL ;
     }

   if (m_rsi_f[index]== INVALID_HANDLE || m_rsi_f[index]== 0 ){m_rsi_f[index]= iRSI (symbol, PERIOD_CURRENT ,period_RSI_F, PRICE_CLOSE ); return ( WRONG_VALUE );}
   if ( CopyBuffer (m_rsi_f[index], 0 , 0 , 3 ,rsi_f)< 3 ) return ( WRONG_VALUE );

      
     
   while (trend[index]== WRONG_VALUE && ! IsStopped ());

   if ( CopyBuffer (m_rsi_f[index], 0 , 0 , 3 ,rsi_f)< 3 ) return ( WRONG_VALUE );

   if (trend[index]== ORDER_TYPE_BUY )
     {
       if (signal_01 && rsi_f[ 1 ]<- 100.0 ) return ( ORDER_TYPE_BUY );
       if (signal_02 && rsi_f[ 1 ]<- 100.0 && rsi_f[ 0 ]>- 110.0 ) return ( ORDER_TYPE_BUY );
       if (signal_03 && rsi_f[ 1 ]>- 100.0 && rsi_f[ 0 ]<- 110.0 ) return ( ORDER_TYPE_BUY );
       if (signal_04 && rsi_f[ 1 ]> 100.0 && rsi_f[ 0 ]< 110.0 ) return ( ORDER_TYPE_BUY );
       if (signal_05 && rsi_f[ 1 ]> 100.0 ) return ( ORDER_TYPE_BUY );
     
     }
   if (trend[index]== ORDER_TYPE_SELL )
     {
       if (signal_01 && rsi_f[ 1 ]> 100 ) return ( ORDER_TYPE_SELL );
       if (signal_02 && rsi_f[ 1 ]> 100 && rsi_f[ 0 ]< 110 ) return ( ORDER_TYPE_SELL );
       if (signal_03 && rsi_f[ 1 ]< 100 && rsi_f[ 0 ]> 110 ) return ( ORDER_TYPE_SELL );
       if (signal_04 && rsi_f[ 1 ]<- 100 && rsi_f[ 0 ]>- 110 ) return ( ORDER_TYPE_SELL );
       if (signal_05 && rsi_f[ 1 ]<- 100 ) return ( ORDER_TYPE_SELL );
     
     }

   return ( WRONG_VALUE );
  }
 
Сергей Криушин :
표시기를 RSI로 변환하려고 했습니다. 작동하지 않았습니다. 라이브러리와 일치하지 않는 것 같습니다...
그리고 CopyBuffer는 추세 감지 블록에서 어디를 잃었습니까? RSI 레벨 70과 30이 표준입니다.
 
Sergey Gritsay :
그리고 CopyBuffer는 추세 감지 블록에서 어디를 잃었습니까? RSI 레벨 70과 30이 표준입니다.
예, 나는 뭔가를 속였습니다 ... 나는 또한 내 머리에 100 개가있었습니다 ... 예, 나는 그것이 너무 쉽고 간단하다고 생각했습니다 ...))) 변화하는 붐 ...
 

어드바이저 '}'에서 2개의 오류를 수정하는 데 도움을 줄 수 있는 위치 또는 도움을 줄 사람을 알려주십시오. 프로그램이 예기치 않게 종료됩니다. '{' - 불균형 괄호 TMA.mq4

 extern int    TakeProfit       = 100 ;
extern int    StopLoss         = 50 ;
extern double Lots            = 0.01 ;
extern int     Slippage        = 5 ;
extern string comment         = "Продажа" ;
extern int     Megic           = 123 ;
extern string Indi            = "данные индикатора" ;
extern string TimeFrame       = "current time frame" ; //текущее время кадра
extern int     HalfLength      = 56 ;
extern int     Price           = PRICE_CLOSE ;
extern double ATRMultiplier   = 2.0 ;
extern int     ATRPeriod       = 100 ;
extern bool    Interpolate     = true ;

double PriceHigh, PriceLow, SL, TP;
int ticket;

int init()
{
     if ( Digits == 3 || Digits == 5 )
{    
     
  
 TakeProfit*= 10 ;
    StopLoss*= 10 ;
     Slippage*= 10 ;
     
     
}   
   
     return ( 0 );
    
}

int start()

{
      PriceHigh= iCustom ( Symbol (), 0 , "TMA with Distancer" ,TimeFrame,HalfLength,Price, ATRMultiplier,ATRPeriod, Interpolate, 1 , 0 );
      PriceLow= iCustom ( Symbol (), 0 , "TMA with Distancer" ,TimeFrame,HalfLength,Price, ATRMultiplier,ATRPeriod, Interpolate, 2 , 0 );
    
       if ( Bid >=(PriceHigh);
     {
      SL= NormalizeDouble ( Bid +StopLoss* Point , Digits );
      TP= NormalizeDouble ( Bid -TakeProfit* Point , Digits );
      
     
     ticket= OrderSend (Simbol(), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 ,comment, 123 , 0 ,Maroon);
     
     
 
    
     if (ticket> 0 );
     
{ 
   if   ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES )== true );
      
       OrderModify (ticket, OrderOpenPrice ,ST,TP, 0 );
      
     }
}
      

   if ( Ask < 0 );
{
   ST= NormalizeDouble ( Ask -StopLoss* Point , Digits );
   TP= NormalizeDouble ( Ask +TakeProfit* Point , Digits );
  
     ticket= OrderSend (Simbol(), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 ,comment, 123 , 0 , clrDarkBlue );
     

    
     if (ticket> 0 );
     
{ 
   if   ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES )== true );
       
       OrderModify (ticket, OrderOpenPrice ,ST,TP, 0 );
     
     }
     return ( 0 );
     
 }

   int CountSell()
  {
   int count= 0 ;
   for ( int trede= OrdersTotal ()- 1 ;tred>= 0 ;tread--)
   {
     OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
     if ( OrderSymbol ()== Symbol ()&& OrderMagicNumber ()==Megic)
    {
     if ( OrderType ()== OP_SELL )count==;
    }
    }
     return (count);
    }
    
        
 int CountBuy()
  {
   int count= 0 ;
   for ( int trede= OrdersTotal ()- 1 ;tred>= 0 ;tread--)
   {
     OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
     if ( OrderSymbol ()== Symbol ()&& OrderMagicNumber ()==Megic)
    {
     if ( OrderType ()== OP_BUY )count==;
    }
    }
     return (count);
    }


 
vladislavch19 :

어드바이저 '}'에서 2개의 오류를 수정하는 데 도움을 줄 수 있는 위치 또는 도움을 줄 사람을 알려주십시오. 프로그램이 예기치 않게 종료됩니다. '{' - 불균형 괄호 TMA.mq4



코드를 올바르게 붙여넣으십시오: 포럼에 코드를 올바르게 붙여넣었습니다(귀하의 메시지를 수정했습니다).

추가됨: 코드 스타일러를 사용하는 것이 좋습니다. 오류를 감지하는 데 도움이 됩니다( 소스 코드 작업: Styler - 프로그램 개발 ).