時間足を切り替えたときに毎回発生する処理を回避したい

 

こんにちは。
私はOninit()関数でHttpリクエストを使い、web認証を行うインジケータを作成しております。
当該インジケータは販売を予定しているもので、ある程度厳密に認証を行う必要があります。


生じている問題は「時間足を変更したときに再度Oninit()が開始され、何度もweb認証が行われる」ことです。
この何度も行われるweb認証を回避したいと考えています。

理想の動作としては、ターミナルの再起動時や、初めてチャートに当該インジケータを適用したときに一度だけ認証が行われること。
そして日付が変わる、またはターミナルを再起動したときの2パターンでのみ再度web認証を行えればいいと思っています。


なお認証には組み込みのWebRequeat()ではなく、GitHubで入手したrestmql_x64.dlのPost関数を利用しています。以下はrestmql_x64.dllのコードです(C#)

using System;
using System.Net.Http;
using System.Runtime.InteropServices;
namespace Cyrus.Mql5
{
    public class RestMQL
    {
        [DllExport("Get", CallingConvention = CallingConvention.StdCall)]
        [return: MarshalAs(UnmanagedType.LPTStr)]
        public static string Get([In, MarshalAs(UnmanagedType.LPTStr)] string url)
        {
            using (var httpClient = new HttpClient())
            {
                var response = httpClient.GetStringAsync(new Uri(url)).Result;

                return response;
            }
        }

        [DllExport("Post", CallingConvention = CallingConvention.StdCall)]
        [return: MarshalAs(UnmanagedType.LPTStr)]
        public static string Post([In, MarshalAs(UnmanagedType.LPTStr)] string url, [In, MarshalAs(UnmanagedType.LPTStr)] string data)
        {
            using (var httpClient = new HttpClient())
            {

               var response = httpClient.PostAsync(new Uri(url), new StringContent(data));

               return response.Result.Content.ReadAsStringAsync().Result;
            }
        }
    }
}

インジケーターの特性上、頻繁に時間足が変更されるものなので、ユーザビリティが著しく損なわれております。
解決策がおわかりの方がいらっしゃれば、お助けください。


考えた対処法は以下の2点ですが、どちらも穴があり、簡単に認証を回避されてしまうかと思います。

  1. Oninit()ではweb認証を行わずに、OnTimer()で5分後などにweb認証をする
    →5分以内に当該インジを再適用するインジやスクリプトなどでweb認証を回避されてしまう

  2. ターミナルのグローバル変数を利用し、が時間足変更だったときは認証を行わないようにする
    →利用者が予め対応するグローバル変数を用意していた場合、簡単に認証回避されてしまう


自分のできる限り、母語以外のページも探してみましたが解決策が見つかりませんでした。
返答に必要な情報が足りない場合は、言っていただければできるかぎり開示します。

よろしくお願いいたします。

GitHub - cyrus13/rest-mql: A REST library for MQL5. Comprises of a C# dll that deals with the REST communication and an MQL5 sample project.
GitHub - cyrus13/rest-mql: A REST library for MQL5. Comprises of a C# dll that deals with the REST communication and an MQL5 sample project.
  • cyrus13
  • github.com
It's a REST library for MQL5. Comprises of a C# dll that deals with the REST communication and an MQL5 sample project. There are numerous examples to call REST API using MQL without a dll. But these examples do not work with backtesting. As a result if you have a functionality in your Expert Advisor (e.g. do not trade during market news) and...
 
vows.ingenue_0j:
  1. Oninit()ではweb認証を行わずに、OnTimer()で5分後などにweb認証をする
    →5分以内に当該インジを再適用するインジやスクリプトなどでweb認証を回避されてしまう

  2. ターミナルのグローバル変数を利用し、が時間足変更だったときは認証を行わないようにする
    →利用者が予め対応するグローバル変数を用意していた場合、簡単に認証回避されてしまう

1.はどんな処理をしようとしているのかよく分かりません。

2.特別な計算法で算出した暗号数値を Gloval variable に登録するようにしたらどうですか?

あるいはファイルとして保存し、それをAPIで簡単には見つからないようなどこかのフォルダーに紛れ込ませるとか方法はあると思います。

※ここは日本語フォーラムです。英語の質問は英語フォーラムに投稿してください。「一般」に投稿されている英語の投稿は削除してください。

 

@Nagisa Unadaさん
ご返信ありがとうございます。
英語の質問、失礼しました。日付またいでしまったからなのか、削除できませんでした。以後、気をつけます。


2.特別な計算法で算出した暗号数値を Gloval variable に登録するようにしたらどうですか?

値をユーザーに控えられ、事前に変数を作成されることを防ぐには
毎回異なる暗号数値を生成してそれを解読・復号する方法を実装する必要があると考えましたが、それを実現する手段はありますでしょうか?


Global variableの変数名にハッシュ値を使ったり、値に暗号数値を使うにしても
インジケータだけが生成・復号できる暗号でありかつ、変数名や値を毎回異なるものにして
web認証を行うか否かの判定ができればベストだと思いました。


あるいはファイルとして保存し、それをAPIで簡単には見つからないようなどこかのフォルダーに紛れ込ませるとか方法はあると思います。

こちらのヒント、ありがとうございます。そのファイルが見つからなければ問題ありませんね。ひとまず実装方法考えてみます。
ちなみに「APIで」というのは「WinAPIを使ったりして」と読み替えて問題ないでしょうか。
他のAPIサービスを使うということではないですよね...?

 
vows.ingenue_0j #:


毎回異なる暗号数値を生成してそれを解読・復号する方法を実装する必要があると考えましたが、それを実現する手段はありますでしょうか?


ちなみに「APIで」というのは「WinAPIを使ったりして」と読み替えて問題ないでしょうか。

キーとなる少数桁の数値をランダムに作成し、それでメインの暗号数値を作成。両方を文字列にして順番を並べ替えまた数値にもどして保存。

解読はその逆で文字列にした後、順番を元に戻し、キー数字を取り出して暗号を元の数値に戻す。

Global variable に保存する暗号数値を変えるだけですから、変数名を変える必要はありません。


WinAPI のことです。

 
Nagisa Unada #:

キーとなる少数桁の数値をランダムに作成し、それでメインの暗号数値を作成。両方を文字列にして順番を並べ替えまた数値にもどして保存。

解読はその逆で文字列にした後、順番を元に戻し、キー数字を取り出して暗号を元の数値に戻す。

@Nagisa Unadaさん

ご教示いただいたようにひとまず実装してみて、
「時間足を変更したときに再度Oninit()が開始され、何度もweb認証が行われる」問題を回避できました。

当該インジの実装の過程で別の問題が生じまして、しばらく考えてみてわからない場合は別スレッド立てて質問しようと考えております。
もしお時間ありましたらまたご教示いただければ幸いです。

本件ありがとうございました。大変助かりました。

理由: