Ilya Vasenin:
そう、マーケットプレイスにはたくさんの取引パネルがある。フリーランスには、取引パネルを作成するためのさまざまな仕事がたくさんあります。あなたも、他の誰でも、この既製のパネルを無料で使うことができる。しかし、これは記事であって、マーケットプレイスの商品ではない。この記事の目的は、既製の製品を提供することではなく、誰もが自分の要求に従って、自分の取引パネルを作成できる方法を紹介し、学びたい人に教えることです。
似たようなパネルは以前からこのサイトに掲載されている。標準的なものと比べて使い道はない。
アイデアとしては
1) 逆指値の後ろに逆指値のボタン。
2)ワンボタンのポジション反転 ボタン。
3) ポジショントラールボタン
4) マーチンゲール逆指値ボタン
5) 利食いボタン 3対1またはカスタマイズ可能。
最低基準設定。
Dmitriy Gizlyk:
この記事の目的は、既製の製品を提供することではなく、誰もが自分の要求に従って、自分自身の取引パネルを作成できる方法を示し、教えることです。
この記事の目的は、既製の製品を提供することではなく、誰もが自分の要求に従って、自分自身の取引パネルを作成できる方法を示し、教えることです。
ドミトリー、今日、あなたのチュートリアルに従ってμl 4でパネルを作り始めました。ほとんどすべてうまくいくのですが、パネルやボタンをクリックすると、買いしか開きません。何が原因でしょうか?
//+------------------------------------------------------------------+ //|トレードパネルmq4 //| Copyright 2015, MetaQuotes Software Corp. //|https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <Controls\Dialog.mqh> #include <Controls\Label.mqh> #include <Controls\Button.mqh> //--- 入力 extern double Lot = 0.1; // ロット extern int StopLoss = 500; // ムース extern int TakeProfit = 500; // ヤジ extern int Slip = 30; // リクオーツ extern int Magic = 0; // マジク //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ enum label_align { left=-1, right=1, center=0 }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class CTradePanel : public CAppDialog { private: CLabel Lots_label; // ラベル「Lots」を表示する CEdit Lots; // 次の注文の数量を表示する CButton SELL,BUY; // 売りボタンと買いボタン CButton CloseAll; // 閉じるボタン //--- ラベルオブジェクトの作成 bool CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align); //--- ボタンの作成 bool CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size); //--- 編集オブジェクトの作成 bool CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size); //--- イベント関数について void LotsEndEdit(void); // ロットサイズの編集 //--- 現在の値の変数 double cur_lot; // 次の注文のロット void BuyClick(); // 購入ボタンをクリック void SellClick(); // 販売ボタンをクリック void CloseClick(); // CLOSEボタンをクリック public: CTradePanel(void){}; ~CTradePanel(void){}; virtual bool Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420); virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); virtual void Destroy(const int reason); }; CTradePanel TradePanel; //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ int OnInit() { //--- // トレードパネル作成 TradePanel.Create(ChartID(),"Panelka",0,20,20,150,200); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパート初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { TradePanel.Destroy(reason); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool CTradePanel::CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align) { // すべてのオブジェクトは別々の名前でなければならない string name=m_name+"Label"+(string)ObjectsTotal(chart,-1,OBJ_LABEL); //--- Create関数を呼び出す if(!object.Create(chart,name,subwindow,x,y,0,0)) { return false; } //--- テキストを調整する if(!object.Text(text)) { return false; } //--- テキストをダイアログボックスのグリッドに合わせる ObjectSetInteger(chart,object.Name(),OBJPROP_ANCHOR,(align==left ? ANCHOR_LEFT_UPPER :(align==right ? ANCHOR_RIGHT_UPPER : ANCHOR_UPPER))); //--- コントロールにオブジェクトを追加する if(!Add(object)) { return false; } return true; } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool CTradePanel::CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size) { // すべてのオブジェクトは別々の名前でなければならない string name=m_name+"Button"+(string)ObjectsTotal(chart,-1,OBJ_BUTTON); //--- Create関数を呼び出す if(!object.Create(chart,name,subwindow,x,y,x+x_size,y+y_size)) { return false; } //--- テキストを調整する if(!object.Text(text)) { return false; } //--- ボタンのフラグをロック解除に設定する object.Locking(false); //--- ボタンのフラグを未押しに設定する if(!object.Pressed(false)) { return false; } //--- コントロールにオブジェクトを追加する if(!Add(object)) { return false; } return true; } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool CTradePanel::CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size) { // すべてのオブジェクトは別々の名前でなければならない string name=m_name+"Edit"+(string)ObjectsTotal(chart,-1,OBJ_EDIT); //--- Create関数を呼び出す if(!object.Create(chart,name,subwindow,x,y,x+x_size,y+y_size)) { return false; } //--- テキストを調整する if(!object.Text(text)) { return false; } //--- 編集ボックスのテキストを揃える if(!object.TextAlign(ALIGN_CENTER)) { return false; } //--- 読み取り専用フラグをfalseに設定する if(!object.ReadOnly(false)) { return false; } //--- コントロールにオブジェクトを追加する if(!Add(object)) { return false; } return true; } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool CTradePanel::Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420) { // 最初に親クラスのcreate関数を呼び出す CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2); // BIDオブジェクトの座標とサイズを計算する // オブジェクトの作成 CreateLabel(chart,subwin,Lots_label,"LOT",55,5,0); CreateEdit(chart,subwin,Lots,"0.1",33,35,60,20); CreateButton(chart,subwin,BUY,"BUY",33,65,60,20); CreateButton(chart,subwin,SELL,"SELL",33,95,60,20); CreateButton(chart,subwin,CloseAll,"CLOSE",33,125,60,20); return(true); } //+------------------------------------------------------------------+ //| イベントハンドリング| //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(CTradePanel) ON_EVENT(ON_END_EDIT,Lots,LotsEndEdit) ON_EVENT(ON_CLICK,BUY,BuyClick) ON_EVENT(ON_CLICK,SELL,SellClick) ON_EVENT(ON_CLICK,CloseAll,CloseClick) EVENT_MAP_END(CAppDialog) //+------------------------------------------------------------------+ //| 購入ボタンをクリック| //+------------------------------------------------------------------+ void CTradePanel::BuyClick(void) { PutOrder(0,Ask); } //+------------------------------------------------------------------+ //| 購入ボタンをクリック| //+------------------------------------------------------------------+ void CTradePanel::SellClick(void) { PutOrder(1,Bid); } //+------------------------------------------------------------------+ //| 購入ボタンをクリック| //+------------------------------------------------------------------+ void CTradePanel::CloseClick(void) { CloseAll(); } //+------------------------------------------------------------------+ //| 編集後にロット値を読み込む| //+------------------------------------------------------------------+ void CTradePanel::LotsEndEdit(void) { //--- ロット値を読み取り、正規化する cur_lot=NormalizeDouble(StringToDouble(Lots.Text()),2); } //+------------------------------------------------------------------+ //| アプリケーションの初期化関数 //+------------------------------------------------------------------+ void CTradePanel::Destroy(const int reason) { CAppDialog::Destroy(reason); return; } //+------------------------------------------------------------------+ | オーダーの設定| //+------------------------------------------------------------------+ void PutOrder(int type,double price) { int r=0; color clr=Green; double sl=0,tp=0; if(type==1 || type==3 || type==5) { clr=Red; if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); } if(type==0 || type==2 || type==4) { clr=Blue; if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); } r=OrderSend(NULL,type,Lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr); return; } //+------------------------------------------------------------------+ //| 注文タイプによるポジションのクローズ| //+------------------------------------------------------------------+ void CloseAll(int ot=-1) { bool cl; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==0 && (ot==0 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White); } if(OrderType()==1 && (ot==1 || ot==-1)) { RefreshRates(); cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White); } } } } } //+------------------------------------------------------------------+ //| エキスパートティック機能| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| チャートイベント機能| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- TradePanel.OnEvent(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+
Andrew Kornishkin:
ドミトリー、今日、あなたのチュートリアルに従って µl 4 でパネルを作り始めました。ほとんどすべてうまくいくのですが、パネルやボタンをクリックすると、購入したものしか開きません。何が原因でしょうか?
おやすみなさい、アンドリュー。
クラスの説明ではすべて正しく書かれています。唯一の間違いは、取引パネルクラスを作成した 後のOnInit関数で、Run関数で実行を開始していないことです。
int OnInit() { //--- // トレードパネル作成 TradePanel.Create(ChartID(),"Panelka",0,20,20,150,200); TradePanel.Run(); //--- return(INIT_SUCCEEDED); }
よろしく、
ドミトリー。
あなたの取引パネルをメタトレーダーにダウンロードしたのですが、動きません。残念です。
19681:
あなたの取引パネルをメタトレーダーにダウンロードしたのですが、動きません。残念です。
あなたの取引パネルをメタトレーダーにダウンロードしたのですが、動きません。残念です。
パネルを機能させるには、他の取引プログラムと同様に、ターミナルで自動取引を有効にする必要があります。
Dmitriy Gizlyk:
パネルが機能するためには、他の取引プログラムと同様に、ターミナルで自動取引を有効にする必要があります。
自動取引はもちろん有効です。そして、それはボタンが機能しないという事実として現れます(売りまたは買いをクリックすると、"error of open BUY ORDER "と表示されます)。
パネルが機能するためには、他の取引プログラムと同様に、ターミナルで自動取引を有効にする必要があります。

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 手動取引のサポーターを作成する はパブリッシュされました:
近年、為替市場の為のトレードロボットの数は、雪だるま式に増えています。これらのトレードロボットの中には、様々な概念や戦略がありますが、負けない人工知能の作成は誰も成し遂げていません。その為、多くのトレーダーは手動取引を支持しています。しかし、このようなスペシャリストの為に、トレードパネルと呼ばれるロボットアシスタントが作成されています。この記事では、トレードパネルの作成例を『ゼロから』ご紹介していきます。
白紙の紙を手に取り、取り入れる必要のある要素を全て配置しつつ、私達の未来のトレードパネルを描いていきましょう。
未 来のトレードパネルのデザインを設計する時には、その実用性について考える必要があります。まず第一に、パネルは十分に情報量が多いもので、かつ読みやす く、余分な要素で負担が過重にならないものであるべきです。私達はこれは、画面上のただの美しい絵ではなく、トレーダーが実際に使用するツールであるとい うことを常に覚えておく必要があります。
これが私の案です。
作者: Dmitriy Gizlyk