私が試行錯誤しているアドバイザーの組み立て方 - ページ 33

削除済み  
Aleksandr Klapatyuk:

#property version "1.07"

ボタンの色を変更しました。

ボタンは使用せず、インフォメーションバーとして使用します。

と別の色

アルパリMT5.png

ファイル:
削除済み  

このコードの作者を教えてください -(またはもともと私はあなたが私に与えたリンクから別のコードをダウンロードしたSpeed-v1.mq548キロバイト)

こう見えても

//+------------------------------------------------------------------+
//| AVGiS.mq5 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"

彼なのか?

セム

ポジションが利益になると、ボタンを押すと、その方向にさらにポジションがオープンします。

EURUSDH2 USDCHFH2.png

いいえ、水平線が売りのトリガーになると、買いボタンが売りボタンをトリガーし、売りボタンがトリガーしないことが判明しました------。

何がベストなのかは実験してみないとわからないが、リバーサルはおそらく有効だろう。

削除済み  

#property version "1.08"

反転ボタンを追加した。

で、設定で、場所を変更

ボタンセットアップ

input string   t9="------ Button: AVGiS -----";         // AVGiS
input bool     ObjectLineX             = false;         // Button: Horizontal Line(true) || Buy/Sell(false)
input bool     TickRevers              = false;         // Button: Revers
input int      TrailingStop_STOP_LEVEL = 350;           // Trailing Stop LEVEL
input ENUM_TIMEFRAMES _period          = PERIOD_CURRENT;// period
input int      limit_total_symbol      = 190;           // limit_total_symbol
input int      limit_total             = 190;           // limit_total
//---

ポジションを開くと、ストップロスはすぐに設定されますが、トロールも設定されます(黄色の水平線 です)。

input string   t2="------ Obj:Trailing Line     --- ";  // Trailing Obj:Line
input double   InpStopLoss             = 55;            // Obj: Stop Loss, in pips (1.00045-1.00055=1 pips) ------------------что бы отключить, ставим 0 !!!!!!
input ushort   InpObjTrailingStop      = 27;            // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStep      = 9;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)

が、ストップロスは同じ位置にはならず、トレーリング入力によって 引き上げられる ushort InpObjTrailingStop = 27;// Obj:トレーリングストップ(価格から対象までの距離、単位:ピップス)

----------------------------------------------------------------

このボタンの仕組みがよくわからないんです。

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.
ファイル:
2.mq5  17 kb
削除済み  

#property version "1.09"

もう一つのボタンを追加 - すべてのペアのすべてのオープンポジションを削除します。

Expert Advisorを削除し、チャートテンプレートを変更する。

アルパリMT5XXX

ファイル:
2.mq5  17 kb
削除済み  

#property version "1.10"

ボタンを非表示にする機能を追加しました。

私はここで台無しにした - それはデモで動作しますが、それはエラーが発生しました 2019.11.05 15:51:33.103 AVGiS知能(GBPUSD、H1)の範囲外の配列 'AVGiS intelligence.mq5' (176,34)で。

   //+------------------------------------------------------------------+
   //| Calculate optimal lot size                                       |
   //+------------------------------------------------------------------+
   double            TradeSizeOptimized(void)
     {
      double price=0.0;
      double margin=0.0;
      string arr[];
      int resize = 0, syTotal = SymbolsTotal(true);
      for(int i = 0; i < syTotal; i++)
        {
         string name = SymbolName(i, true);
         if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
           {
            resize = ArrayResize(arr, i+1);
            arr[i] = name;
           }
         //--- select lot size

         if(!SymbolInfoDouble(arr[i],SYMBOL_ASK,price))
            return(0.0);
         if(!OrderCalcMargin(ORDER_TYPE_BUY,arr[i],1.0,price,margin))
            return(0.0);
         if(margin<=0.0)
            return(0.0);
        }
      double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2);
      //--- calculate number of losses orders without a break
      if(DecreaseFactor>0)
        {
         //--- select history for access
         HistorySelect(0,TimeCurrent());
         //---
         int    orders=HistoryDealsTotal();  // total history deals
         int    losses=0;                    // number of losses orders without a break

         for(int y=orders-1; y>=0; y--)
           {
            ulong ticket=HistoryDealGetTicket(y);
            if(ticket==0)
              {
               Print("HistoryDealGetTicket failed, no trade history");
               break;
              }
            for(int i = 0; i < syTotal; i++)
              {
               string name = SymbolName(i, true);
               if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
                 {
                  resize = ArrayResize(arr, i+1);
                  arr[i] = name;
                 }
               //--- check symbol
               if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=arr[i])
                  continue;
               //--- check Expert Magic number
               if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=Magic_Number)
                  continue;
               //--- check profit
               double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
               if(profit>0.0)
                  break;
               if(profit<0.0)
                  losses++;
              }
           }
         //---
         if(losses>1)
            lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
        }
      for(int i = 0; i < syTotal; i++)
        {
         string name = SymbolName(i, true);
         if(SymbolInfoInteger(name, SYMBOL_VISIBLE))
           {
            resize = ArrayResize(arr, i+1);
            arr[i] = name;
           }
         //--- normalize and check limits
         double stepvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_STEP);
         lot=stepvol*NormalizeDouble(lot/stepvol,0);
         double minvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MIN);
         if(lot<minvol)
            lot=minvol;
         double maxvol=SymbolInfoDouble(arr[i],SYMBOL_VOLUME_MAX);
         if(lot>maxvol)
            lot=maxvol;
        }
      //--- return trading volume
      return(lot);
     }
   //+------------------------------------------------------------------+
ファイル:
削除済み  

これが働く専門家です

ファイル:
削除済み  

従来のExpertに、Horizontal line 用のメソッドを2つ追加しました。

1つの可能性:ライン1が与えられた距離でライン4を開き、ライン2が与えられた 距離でライン 3を開く。

input string   t3="------ Obj:Name 1-2-3-4 ------";     // Имя Объекта
input string   InpObjUpNameZ           = "TOP 1";       // Obj: TOP (Name Obj) ВВЕРХУ 1
input string   InpObjDownNameZ         = "LOWER 2";     // Obj: LOWER (Name Obj) ВНИЗУ 2
input int      Step                    = 5;             // Obj: Шаг сетки, пунктов(0 = false)
input string   InpObjDownName0         = "TOP 3";       // Obj: TOP (Name Obj) ВВЕРХУ 3
input ENUM_TRADE_COMMAND InpTradeCommand=open_sell;     // Obj:  command:
input string   InpObjUpName0           = "LOWER 4";     // Obj: LOWER (Name Obj) ВНИЗУ 4
input ENUM_TRADE_COMMAND InpTradeCommand0=open_buy;     // Obj:  command:

2つ目の可能性:ライン7は、価格の後ろに移動する所定の距離に ライン10を開き、価格がそれに触れるとコマンドをトリガーします。ライン8は、所定の距離に ライン9を開き、- 7と10と同じ動作をします。

input string   t5="- 2_Obj:Trailing Line 7-8-9-10 --- ";// Trailing Obj:Line
input string   InpObjUpNameZx          = "TOP 7";       // Obj: TOP (Name Obj) ВВЕРХУ 7
input string   InpObjDownNameZx        = "LOWER 8";     // Obj: LOWER (Name Obj) ВНИЗУ 8
input int      StepZx                  = 5;             // Obj: Шаг сетки, пунктов(0 = false)
input string   InpObjUpNameX           = "TOP 9";       // Obj: TOP (Horizontal Line) ВВЕРХУ 9
input ENUM_TRADE_COMMAND InpTradeCommandX=open_sell;    // Obj:  command:
input string   InpObjDownNameX         = "LOWER 10";    // Obj: LOWER (Horizontal Line) ВНИЗУ 10
input ENUM_TRADE_COMMAND InpTradeCommand0X=open_buy;    // Obj:  command:
input ushort   InpObjTrailingStopX     = 5;             // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStepX     = 5;             // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.
ファイル:
削除済み  
Aleksandr Klapatyuk:

従来のExpertに、Horizontal line 用のメソッドを2つ追加しました。

1つの可能性:ライン1が与えられた距離でライン4を開き、ライン2が与えられた 距離でライン 3を開く。

2つの可能性:ライン7は、価格の後ろに移動する所定の距離に ライン10を開き、価格がそれに触れるとコマンドがトリガーされます。ライン8は、所定の距離に ライン9を開き、 - 7と10と同じアクションです。

はたらいてみた

EURJPYM301.png

EURJPYM302

EURJPYM303

その行から設定を変更することができれば、売り注文を出すことができたはずです。

ファイル:
削除済み  
Aleksandr Klapatyuk:

従来のExpertに、Horizontal line 用のメソッドを2つ追加しました。

1つの可能性:ライン1が与えられた距離でライン4を開き、ライン2が与えられた 距離でライン 3を開く。

2つ目の可能性:7行目で10行目を指定した 距離で開き、価格の後ろに移動して価格がそれに触れるとコマンドが起動する。8行目で9行目を指定した 距離で開き、7と10と同じ動作をする。

最初の可能性では、ライン4と3は与えられた距離で開き、最大で無限大になります。

ファイル:
削除済み  

リスクを正しく処方する方法を考え出した。

#define  Magic_Number 0
//+------------------------------------------------------------------+
//| Enum Lor or Risk                                                 |
//+------------------------------------------------------------------+
enum ENUM_LOT_OR_RISK
  {
   lots=0,     // Constant lot
   risk=1,     // Risk in percent
  };
//+------------------------------------------------------------------+


input double   MaximumRisk             = 0.01;          // Maximum Risk in percentage
input double   DecreaseFactor          = 3;             // Descrease factor
input ENUM_LOT_OR_RISK InpLotOrRisk    = lots;          // Money management: Lot OR Risk
   //+------------------------------------------------------------------+
   //| Calculate optimal lot size                                       |
   //+------------------------------------------------------------------+
   double            TradeSizeOptimized(void)
     {
      double price=0.0;
      double margin=0.0;
      //--- select lot size
      if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price))
         return(0.0);
      if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin))
         return(0.0);
      if(margin<=0.0)
         return(0.0);
      double lot=0;
      //---
      switch(InpLotOrRisk)
        {
         case lots:
            lot=MaximumRisk;
            break;
         case risk:
            lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2);
         default:
            break;
        }
      //--- calculate number of losses orders without a break
      if(DecreaseFactor>0)
        {
         //--- select history for access
         HistorySelect(0,TimeCurrent());
         //---
         int    orders=HistoryDealsTotal();  // total history deals
         int    losses=0;                    // number of losses orders without a break

         for(int i=orders-1; i>=0; i--)
           {
            ulong ticket=HistoryDealGetTicket(i);
            if(ticket==0)
              {
               Print("HistoryDealGetTicket failed, no trade history");
               break;
              }
            //--- check symbol
            if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol)
               continue;
            //--- check Expert Magic number
            if(HistoryDealGetInteger(ticket,DEAL_MAGIC)!=Magic_Number)
               continue;
            //--- check profit
            double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
            if(profit>0.0)
               break;
            if(profit<0.0)
               losses++;
           }
         //---
         if(losses>1)
            lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
        }
      //--- normalize and check limits
      double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
      lot=stepvol*NormalizeDouble(lot/stepvol,0);

      double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
      if(lot<minvol)
         lot=minvol;

      double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
      if(lot>maxvol)
         lot=maxvol;
      //--- return trading volume
      return(lot);

     }
   //+------------------------------------------------------------------+

ここで、ロット - 挿入TradeSizeOptimized()

Expert Advisorで修正しないと、正しく表示されない。