面白いトレーディングのアイデアがあります。コード(mql4)のエラーを見つけるのを手伝ってください。 - ページ 16

 
Sergey Gritsay:
MT5版の不具合を修正

更新ありがとうございます・・・。今週はmt5がちゃんと仕事してくれました...。1000から数えると10%以上...こんな写真もあります。今日も100本以上あったのに...。私もmt4とcmilliona grid6https://www.mql5.com/ru/code/12971 を組み合わせてどうなるか試してみようと思っています...)) 。

チャート CHFJPY, H1, 2016.03.18 12:21 UTC, MetaQuotes Software Corp.

Мультивалютный сеточник GRID 6 SYMBOLS
Мультивалютный сеточник GRID 6 SYMBOLS
  • 投票: 19
  • 2015.05.11
  • Vladimir Khlystov
  • www.mql5.com
Советник выставляет сети стоп-ордеров по нескольким инструментам, далее закрывает все при достижении указанной прибыли.
 
最新バージョン - 明確に動作します - あなたはピップすることができます - 閉会手は、同じ方向に開き、あなたは遅延のいくつかの種類を持っている必要があります...ゼロより少しトラブり始めた・・・2~4pips、そのまま戻れば・・・考える義務-矢印はずっと立っているが、ポジションはない・・・。また、これまでのものに比べて、より多くの信号を出しています。まあ、これはあくまでも概算ですが...。まあ、それはまだ最良の選択肢だ...ありがとうございます...何か他のものは沈黙している - aou-au 他の人が何かを発見した...あるいは、ジンクスを作りたくない ...))
 
Сергей Криушин:
最新バージョン - 明確に動作します - あなたはピップすることができます - 閉会手は、同じ方向に開き、あなたは遅延のいくつかの種類を持っている必要があります...ゼロより少しトラブり始めた・・・2~4pips、そのまま戻れば・・・考える義務-矢印はずっと立っているが、ポジションはない・・・。また、これまでのものに比べて、より多くの信号を出しています。まあ、これはあくまでも概算ですが...。まあ、それはまだ最良の選択肢です... もう一度ありがとう... 他の何かが沈黙している - aw-aw 他の誰が何かを発見した...とか、ジンクスはいらないとか...))
文字数が多いと、全部を計算するまで遅くなる。例えば、価格が目標価格に達する前にエンジンが市場に戻ってくる可能性があります。
 

このストラテジーのシグナルを私のマーチンアドバイザーで接着したところ、2015年1月から今日までの結果がこれです。

EURUSD

USDCHFです。

 
Sergey Gritsay:

このストラテジーのシグナルを私のマーチンアドバイザーで接着したところ、2015年1月から今日までの結果がこれです。

EURUSD

USDCHFです。

Mt5はまた、https://www.mql5.com/ru/code/13315 からの素敵なマーティンを持っています - 最後の負けトレードを乗算する...しかし、この負けトレードが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つの誤りを訂正したいのですが、どこに書けばよいか、どなたかご助言ください。- unexpected end of program '{' - unbalanced parenthes 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つの誤りを訂正したいのですが、どこに書けばよいか、どなたかご助言ください。- unexpected end of program '{' - unbalanced parenthes TMA.mq4



コードを正しく挿入してください:フォーラムでコードを正しく挿入して ください(あなたのメッセージを修正しました)。

追記:コードスタイラーを使用することを強くお勧めします - エラーの検出に役立ちます(ソースコードでの作業:スタイラー - プログラム開発)。