MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1028

 

なぜEAは、保留中の注文価格(売りストップ)をより収益性の高いものに変更できないのでしょうか?


以下は、保留中の注文の建値を移動させる必要性を定義した関数です。

if(orders_total > 0 && position_total == 0)
     {
      OrderGetTicket(0)
      if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP)
        {
         if(OrderGetDouble(ORDER_PRICE_OPEN) - SymbolInfoDouble(_Symbol,SYMBOL_ASK) > ((double)(dist+1)) * _Point) Mode_Order("M",SymbolInfoDouble(_Symbol,SYMBOL_ASK) + ((double)dist * _Point));
        }
      else if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
        {
         if(SymbolInfoDouble(_Symbol,SYMBOL_BID) - OrderGetDouble(ORDER_PRICE_OPEN) > ((double)(dist+1)) * _Point) Mode_Order("M",SymbolInfoDouble(_Symbol,SYMBOL_BID) - ((double)dist * _Point));
        };
     };


...そして、これはすでに保留中の注文の建値を移動させる関数です。

void Mode_Order(string act, double price)
  {
   
   MqlTradeRequest request; ZeroMemory(request);
   MqlTradeResult  result;  ZeroMemory(result);
   
   request.symbol = _Symbol;
   
   if(act == "S")
     {
      request.action   = TRADE_ACTION_SLTP;
      request.position = PositionGetTicket(0);
      request.sl       = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ? PositionGetDouble(POSITION_PRICE_OPEN) - ((double)stop * _Point) : PositionGetDouble(POSITION_PRICE_OPEN) + ((double)stop * _Point));
      request.tp       = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ? PositionGetDouble(POSITION_PRICE_OPEN) + ((double)profit * _Point) : PositionGetDouble(POSITION_PRICE_OPEN) - ((double)profit * _Point));
     }
   else
     {
      request.action   = TRADE_ACTION_MODIFY;
      request.position = OrderGetTicket(0);
      request.price    = NormalizeDouble(price,_Digits);
     };
   
   if(!OrderSend(request,result)) Print("Не удалось изменить параметры ордера. Код ошибки "+(string)result.retcode);
   
  }
 
Alexandr Sokolov:

なぜEAは、保留中の注文価格(売りストップ)をより収益性の高いものに変更できないのでしょうか?


以下は、保留中の注文の建値を移動させる必要性を定義した関数です。


...そして、これはすでに保留中の注文の建値を移動させる関数です。

この注文だけでしょうか?SLTPの修正はうまくいくか? もしうまくいかない場合は、テイクとストップを正規化する必要がある

dist1は何に相当するのか?ここでは、ポジションの代わりにオーダーを設定する必要があります。

request.position = OrderGetTicket(0);
 
Aleksey Mavrin:

注文は1つだけですか?SLTPの修正が効くか? 効かない場合は、テイクをノーマライズして停止する必要があります

dist1は何に相当するのか?ポジションではなく、オーダーを設定すべき

ありがとうございました。私はそれに気づかなかった、それは些細なことのようだ - しかし、それはなしで動作しません


...注文は1つだけで、すべてうまくいき、唯一の問題は保留中の注文を 移動することだった

 
Alexandr Sokolov:

ありがとうございました。一見小さなことですが、これがないと動かないのです。


...注文は1つだけで、 すべてうまくいき、 唯一の問題は保留中の注文を 移動することだった

1.2をお願いします。 うーん、とにかく罪に反して正常化します。価格は整数に正規化された倍数を掛けたもので、一般的なケースでも正規化された倍数が得られるようですが、常にではなく、年に数回は得られるという話をどこかで読んだことがあります。

1.13250000000000001のようなものです。

で、トラブル、タイミングよく、最強のトレンドが機能せず、また住宅ローン、こんにちは)))

間違っているかもしれませんが、私自身はいつも安心させ、正常化させています。

 
Aleksey Mavrin:

1.2をお願いします。 うーん、罪滅ぼしのためにとりあえずノーマライズしています。全体から正規化された倍率をかけた価格を得る、一般的なケースでは正規化された倍率も得られるらしいが、常にではなく、年に数回、得られるかもしれないとどこかで読んだことがある。

1.13250000000000001のようなものです。

で、トラブルで、最強のトレンドが機能しないタイミングで、また住宅ローン、こんにちは)))

間違っているかもしれませんが、私自身はいつも安心させ、正常化させています。

正規化された 2つの数に対する 数学的演算は、正規化されていない結果をもたらす。

実数を用いた数学的演算の結果を正規化したものを返す必要があります。

ノルム(1.11111) + ノルム(2.22222) = NoNorm(res)

ノルム(1.11111 + 2.22222) = ノルム(res)

 

アルチョム・トリシキン

このテーマでのコードを添付します。

コードベースでそのコードを見つけました。コード変更時に不具合が発生しました。

入力部には以下の項目がある。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input eTradeType                                    Inp_element_12357534       = TRADETYPE_BUY;                        // First Trade Type
input double                                        Inp_element_3632865        = 0.01;                                 // Start Lot
input double                                        Inp_element_12844407       = 1.0;                                  // Lot Multiplier
input #ifdef __MQL4__ int #else long #endif          Inp_element_2542795        = 400;                                  // Grid Step, points
input #ifdef __MQL4__ int #else long #endif          Inp_element_3135636        = 100;                                  // Target, points
input #ifdef __MQL4__ int #else long #endif          Inp_element_3634918        = 7373;                                 // Magic
sinput string                                       Inp_element_3640359        = "Grid EA";                            // Comment
//+------------------------------------------------------------------+

このパラメータをプログラム実行中に変更したい: input #ifdef__MQL4__ INT #else long #endif Inp_element_2542795 = 400 // ステップグリッド、ポイント 数。

実行するたびにこのパラメータを変更するにはどうしたらよいか教えてください。

ファイル:
Manage.mq5  859 kb
 
jaffer wilson :

アルチョム・トリシキン

このテーマでのコードを添付します。

コードベースでそのコードを見つけました。コード変更時に不具合が発生しました。

入力部には以下の項目がある。

このパラメータをプログラム実行中に変更したい: input #ifdef__MQL4__ INT #else long #endif Inp_element_2542795 = 400 // ステップグリッド、ポイント 数。

実行するたびにこのパラメータを変更するにはどうしたらよいか教えてください。

正直なところ、この質問はよくわからない。

アドバイザーを起動するたびに、入力パラメータInp_element_2542795を変更しますか?

まあ、起動時にアドバイザーの設定で変更すればいいんだけど。または、アドバイザーがすでに実行されていて、このパラメータを変更したい場合は、F7を押してください - アドバイザー設定ウィンドウが表示され、その中でこのパラメータを変更します。

 
Artyom Trishkin:

正直なところ、この質問はよくわからない。

アドバイザーを起動するたびに、入力パラメータInp_element_2542795を変更しますか?

まあ、起動時にアドバイザーの設定で変更すればいいんだけど。または、アドバイザーがすでに実行されていて、このパラメータを変更したい場合は、F7を押してください - アドバイザー設定ウィンドウが表示され、その中でこのパラメータを変更します。

クリアにしよう。問題は翻訳でしょうかね。実は、これは入力値で、この値がどこで計算に使われているのかがわからないのです。毎回400ポイント 使うのはやめてほしい。値をどんどん変えていきたい。適当な計算で値を変えたい。プログラム実行中に値がダイナミックに変化するようにするには、どこを変更すればよいか教えてください。

 
jaffer wilson :

はっきりさせましょう。問題は翻訳にあると思うんです。実は入力値なのです。そして、この値がどこの計算に使われているのかがわからないのです。400ポイントを毎回使用するのはやめてほしい。値をどんどん変えていきたい。適当な計算で値を変えたい。プログラム実行中に値がダイナミックになるように変更したいのですが、どこを変更すればよいか教えてください。

新しいグローバル変数を 作成します。入力パラメーターInp_element_2542795の 値を設定 する。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
cRunner *Runner;
long g_element_2542795=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//===============
   g_element_2542795=Inp_element_2542795;
//===============
/* DEBUG MACROS' START */ TRACEERRORS_START
//===============
 
//===============
   Runner=new cRunner;
//===============
 

で、Inp_element_2542795という 文字列のエントリ全体を、この新しい変数g_element_2542795で 置き換えます( Ctrl + H )。

 

こんにちは。

MQL5を勉強し始めたばかりなので、相談させてください。

クラスがあります -https://www.mql5.com/ru/code/18721(Vlad Karputova).ウラジミールさんに感謝です。

利益計算(ポイント、預入通貨、スワップ、手数料)をしてくれますが、Magik用のフィルターがありません。

Magikによるフィルタを追加しました(正しいかどうかわからないので、エラーで投稿するのはやめておきます)。

結果を得た。

Search deals with POSITION_IDENTIFIER 53821539
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11164, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11170, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.18
Profit in points -6.0, commission -0.10, swap 0.00, profit -0.18

Search deals with POSITION_IDENTIFIER 53821617
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11159, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11172, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.39
Profit in points -13.0, commission -0.10, swap 0.00, profit -0.39

Search deals with POSITION_IDENTIFIER 53821750
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11163, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11169, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.18
Profit in points -6.0, commission -0.10, swap 0.00, profit -0.18

Search deals with POSITION_IDENTIFIER 53847372
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10971, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11002, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.93
Profit in points -31.0, commission -0.10, swap 0.00, profit -0.93

Search deals with POSITION_IDENTIFIER 53848455
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10997, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.10741, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit 7.68
Profit in points 256.0, commission -0.10, swap 0.00, profit 7.68

Search deals with POSITION_IDENTIFIER 53856130
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10735, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.10769, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -1.02
Profit in points -34.0, commission -0.10, swap 0.00, profit -1.02
All_Profit in points 166.0, All_commission -0.60, All_swap 0.00, All_profit 4.98
All_Profit in points 0.0, All_commission 0.00, All_swap 0.00, All_profit 0.00

オリジナルクラスとMagikによるフィルタリングを施したクラスの結果は一致しています。しかし、ここで1つポイントがあります。

1.OUTのトレードはなぜ魔力がゼロなのか。

2.私がクラスを誤って修正した場合(マジックを追加した場合)-元のクラスに必要な変更を加えて投稿してください。

(そして、シンボルをパラメータとしてクラスに渡すとよいでしょう)。

ありがとうございました。

HistoryPositionInfo version 2
HistoryPositionInfo version 2
  • www.mql5.com
Новое в версии 2: функция GetProfitInPoints осталась, но рекомендуется теперь использовать новую функцию GetProfit: Функция GetProfit возвращает для восстановленной позиции, кроме прибыли в пунктах: комиссию, своп и прибыль в деньгах. Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в...