私のアプローチコアはエンジンです。 - ページ 129

 
私の5セントを入れておきます。今は時間がないんです。しかし、同じようなパネルを家庭で実現する、そんなアイデアもあるのです。ですから、ただクロスを作ってポジションを閉じる のではなく(必要ですが)、マークを作ってロットを指定して、決済を卸すということもやってみてはどうかと思います。そのため、ポジションを持ったまま、より柔軟に仕事ができるようになり、また、その一部を閉鎖することになります。
 
Vasiliy Sokolov:

デモとして添付したエンジンのバージョンで作業してください。

とてもわかりやすいですね。もし、あなたのアプローチが私の考えるように機能するならば、ダイナミックテーブルでもタイマーによる位置値の更新でも問題はないでしょう。ピーター、どうして最初からごちゃごちゃ言うんだ(笑)。

ヴァシリイ 結論を急がないことが肝心です。あなたのためでも私のためでもない))。

 
Konstantin Nikitin:
私の5セントを入れておきます。今は時間がないんです。しかし、同じようなパネルを家庭で実現する、そんなアイデアもあるのです。ですから、単にクロスでポジションを閉じるだけ でなく(必要ですが)、マークをつけてロットを指定し、このホールセール・クローズを行うのが良いと思います。そのため、ポジションを持ったまま、より柔軟に仕事ができるようになり、また、その一部を閉鎖することになります。

できるんです。

 
Vasiliy Sokolov:

ピーターさん、タイマーの中にforループを作って、未決済の注文を調べて、注文リストの変更をテーブルに送ってください。また、テーブルの注文利益も動的に変化させるようにします。

Vasilyさん、このコードをテストEAファイルに貼り付けてください(古い関数の代わりにtickとtimerの関数です)

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //---------------------------------------------
   //Количество ордеров не менялось.
   //---------------------------------------------      
   if(ArraySize(Orders) == OrdersTotal())
     {
      for(int a1 = 0; a1 < OrdersTotal(); a1++)
        {
         if(OrderSelect(a1,SELECT_BY_POS))
           {
            E_Main_form_1__PnL(OrderTicket(),OrderProfit()); 
           }
        }
     }        
  }
//--------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  { 
   //---------------------------------------------
   //Ордер открылся.
   //---------------------------------------------     
   if(ArraySize(Orders) < OrdersTotal())
     {Alert("Ордер открылся!");
      ArrayResize(Orders,OrdersTotal());
      
      //---------------------------------------
      if(OrderSelect(OrdersTotal() - 1,SELECT_BY_POS))
        {
         if(OrderSelect(OrderTicket(),SELECT_BY_TICKET,MODE_TRADES))
           {
            //----------------------------------------------------
            E_Main_form_1__Order(OrderTicket(),OrderTicket());
            E_Main_form_1__Opening_Time(OrderTicket(),TimeToStr(OrderOpenTime(),TIME_MINUTES|TIME_SECONDS));
            E_Main_form_1__Volume(OrderTicket(),OrderLots());
            E_Main_form_1__Symbol(OrderTicket(), OrderSymbol());
            E_Main_form_1__Price(OrderTicket(), OrderOpenPrice());
            E_Main_form_1__Comission(OrderTicket(), OrderCommission());
            E_Main_form_1__Swap(OrderTicket(), OrderSwap());
            E_Main_form_1__PnL(OrderTicket(), OrderProfit());
            E_Main_form_1__Type(OrderTicket(),OrderType()); 
            //----------------------------------------------------
           }
          //--------------------------------------  
          ArrayResize(Orders,OrdersTotal());
          Orders[OrdersTotal() - 1] = OrderTicket();   
          //--------------------------------------
        }
      //---------------------------------------  
     }
   //---------------------------------------------
   //Ордер закрылся.
   //---------------------------------------------  
   if(ArraySize(Orders) > OrdersTotal())
     {
      for(int a1 = 0; a1 < 100; a1++)
        {
         if(OrderSelect(Orders[a1],SELECT_BY_TICKET) && OrderCloseTime())
           {Alert("Ордер закрылся!");
            //--------------------------------------------------
            for(int a3 = 0; a3 < 100; a3++)
              { 
               if(Orders[a3] == OrderTicket())
                 {
                  E_Main_form_1_CLOSE_ROW___Orders_table(OrderTicket());
                  Orders[a3] = 0;
                  //--------------------------------------------------
                  int deleted = 0,q = 0;
                  //--------------------
                  for(int a2 = 0; a2 < ArraySize(Orders); a2++)
                    {
                     if(deleted)Orders[q] = Orders[q+deleted];
                     if(!Orders[q]){deleted++; q--;}
                     q++;
                    }
                  //--------------------------------------------------  
                  ArrayResize(Orders,q);
                  //--------------------------------------------------                      
                 } 
              } 
          }
      }         
 }

}
      
//---------------------------------------------

あと、External Connectionファイルの68行目と114行目を入れ替える必要があります。

E_Main_form_1__Opening_Time(ticket,TimeToStr(OrderOpenTime(),TIME_MINUTES|TIME_SECONDS));
E_Main_form_1__Opening_Time(ticket,TimeToStr(OrderOpenTime(),TIME_MINUTES|TIME_SECONDS));

ちょっとだけ混ざってる。OrderOpenTime() の代わりにOrderOpenPrice() を入れてください。


問題なく使えるはずです。確認してください。

 
注、上のコードを少しいじりました(すでに入れている方)。
 

データ(モデル)とビューを分離し、モデルの変更や特定のモデルフィールドを特定のビューにサブスクライブするために、オブザーバーパターンを使用します。

しかし、そのようなライブラリのユーザーは、オブジェクト指向を考え、提案されたオブジェクト構造にEAデータを押し込む必要があります(そうそう、インターフェースを構築するためには、そのライブラリ/フレームワークのメソッドを学ぶ必要があるのです)。そして、多くの人はOOPについて何も知らない。

でも、ペテロは何も学ぶ必要はないと言っていますよ。生成されたハンドラの既成スプールにグローバル変 数を貼り付けるだけで、インタフェースは動作します。はい、神対応です!「棚用の板を作り、説明書通りにつなげて本を並べる」のではなく、「棚を描いて、その上に本を並べる」のです。コードレス・ドゥ・モア((c)/JQueryなら)


明らかに製品のポジショニングに問題がある。もし、そうだとしたら?おい、プログラマー!お金を稼ぎたいですか?良さそうなものは売ってもいいのでは!?インターフェイスのないExpert Advisorを100本ほど持っていって、インターフェイス付きで売る。)


まあ、コントロールのハンドラが「はみ出る」というインターフェイスファイルの欠点もあるのですが、静的なものですからね。私は頭を働かせて、テンプレートとして動作し、入力パラメータを介してユーザー/プログラムデータを受け入れる新しいハンドラタイプを作成する必要があります。

 
Igor Volodin:

え、キャノンをするわけでもなく...。

大丈夫、リハスタがコノワザをやってくれる。)))

 
Igor Volodin:

データ(モデル)とビューを分離し、モデルの変更や特定のモデルフィールドを特定のビューにサブスクライブするために、オブザーバーパターンを使用します。

しかし、そのようなライブラリのユーザーは、オブジェクト指向を考え、提案されたオブジェクト構造にEAデータを押し込む必要があります(そうそう、インターフェースを構築するためには、そのライブラリ/フレームワークのメソッドを学ぶ必要があるのです)。そして、多くの人はOOPについて何も知らない。

でも、ペテロは何も学ぶ必要はないと言っていますよ。生成されたハンドラの既成スプールにグローバル変 数を貼り付けるだけで、インタフェースは動作します。はい、神対応です!「棚用の板を作り、説明書通りにつなげて本を並べる」のではなく、「棚を描いて、その上に本を並べる」のです。コードレス・ドゥ・モア((c)/JQueryなら)


明らかに製品のポジショニングに問題がある。もし、そうだとしたら?おい、プログラマー!お金を稼ぎたいですか?良さそうなものは売ってもいいのでは!?インターフェイスのないExpert Advisorを100本ほど持っていって、インターフェイス付きで売る。)


まあ、コントロールのハンドラが「はみ出る」というインターフェイスファイルの欠点もあるのですが、静的なものですからね。私は頭を働かせて、テンプレートとして動作し、入力パラメータを介してユーザー/プログラムデータを受け入れる新しいハンドラタイプを作成する必要があります。

最初はまたネガキャンのバッチかと思ったが、よく読んでみるとそうでもないらしい。感情だけでいい。

このコンストラクタは、アルゴリズム取引に熱心な人を対象としています。グラフライブラリの勉強に時間をとられることなく、このコードだけで構成できるのは理にかなっている。

//====================================================================================================================
NEW_WINDOW,  W_NAME, "Main form 1",  W_ICON, 12,  W_TYPE, SETTINGS, ALWAYS_ON_TOP,    OOI,
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
GROUP, A,

__, BUTTON,"BUY",text,N_COLOR,(int)clrBlue, GAP,50,  BUTTON,"SELL", text,N_COLOR,(int)clrRed,

END_GROUP,
//-------------------------- 
i, AT, _X2X, "MF", 10, _Y2Y,"MF", 10,

i,BUTTONS, PARAM_TYPE,_BOOL, TEXT_FONT,"Times New Roman",  W,100, H,34, FONT_SIZE,11,   END,

//----------------------------------------------------------------------------------
GROUP, A,

__,V_BOX,"V1",W,860,  _,H,248,_,N_FRAME,1,_,NP_FRAME,1,

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y,"MF", 50,
//----------------------------------------------------------------------------------

//----------------------------------------------------------------------------------
//Объявляем таблицу:
//----------------------------------------------------------------------------------
GROUP,"Orders table", IS_TABLE,  

__,     T_HEADER, "#",W,20,_,H,30, C_HEADER, "Order",     C_HEADER, "Opening Time",W,90, C_HEADER, "Type", W,90,  C_HEADER, "Volume", W,90,  C_HEADER, "Symbol", W,90, 
                               C_HEADER, "Price",       W,90,    
                               C_HEADER, "Comission",   W,90, C_HEADER, "Swap", W,90,  C_HEADER, "PnL",    W,90,  C_HEADER, "Close",  W,40,

__,     R_HEADER,"1", CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A,     
__,     R_HEADER,"2",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"3",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"4",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"5",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"6",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"7",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"8",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"9",CELL, A,   CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"10",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"11",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"12",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"13",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"14",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"15",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"16",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"17",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"18",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"19",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"20",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
__,     R_HEADER,"21",CELL, A,  CELL, A,  CELL, A,   CELL, A,  CELL, A,   CELL, A, CELL, A, CELL, A, CELL, A,  I_BUTTON, A, 
 
END_GROUP,
//------------------------------------
i,AT, LEFT_TOP, 0,0,
i, IN, "V1",
//-----------
i, Y_GAP,-1,
i, X_GAP,-1,
//-----------
i, IS_ZEBRA_STYLE,
i, DnD_RECIEVER,
i, R_HEADERS,   W,20, N_COLOR,(int)C'0,235,0', END,
i, C_HEADERS,   H,30,                          END,
i, CELLS,       H,25,                          END,
i, C_HEADERS,   DnD_ON, DnD_FUNCTION, ROTATE_COLOMNS, END,
i, I_BUTTONS, C_FUNCTION, DELETES_ROW,   text,HIDE,1, N_FRAME,1,A_FRAME,1, NP_FRAME,1, AP_FRAME,1, N_LABEL,745, END,
i, IS_DINAMIC,
//----------------------------------------------------------------------------------
"Order", H,30,
//----------------------------------------------------------------------------------
END_WINDOW,
//====================================================================================================================

そして、ディンテーブルのある窓を確保する。


インターフェイスファイルの中で、ユーザーはこのようなコードを得ます。

//=====================================================================================================================
//WINDOW:   Main form 1 | element: BUTTON  | name: BUY  |  Location: Window's Main Frame
//=====================================================================================================================
case BUTTON3____BUY:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:     break;
  
                case released:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
//=====================================================================================================================
//WINDOW:   Main form 1 | element: BUTTON  | name: SELL  |  Location: Window's Main Frame
//=====================================================================================================================
case BUTTON4____SELL:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:     break;
  
                case released:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
//=====================================================================================================================
//WINDOW:   Main form 1 | element: I_BUTTON  | name: 1_Close  |  Location: Window's Main Frame   | Table: 300000007
//=====================================================================================================================
case I_BUTTON14___Close:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:     break;
  
                case released:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
   }
}
//=================================================================================================================

そして、ボタンのクリックイベントに対して、何をどのように行うかを決定します。

 
月間最優秀 賞受賞
 

次のダイナミックテーブルは、さらに面白いものになるでしょう。セルには、入力フィールド、ポップアップリスト、チェックボックス、ボタン、ラジオボタン、プログレスバー、および+/-ボタン付きの入力フィールドが用意されています。

厄介なのは、こうしたテーブルのダイナミズムです。結局、要素へのアクセスやその値の取得は、特定のパラメータに縛られることなく、行のレイアウトに依存することになります。