ライブラリ: Symbol - ページ 6

 
class CURRENCY_CHECK
{
public:
  CURRENCY_CHECK( void )
  {
    const string CurrencyProfit = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
    const string AccountCurrency = ::AccountInfoString(ACCOUNT_CURRENCY);
    const bool Res = !::MQLInfoInteger(MQL_TESTER) || (CurrencyProfit == AccountCurrency);
    
    if (!Res && !::MQLInfoInteger(MQL_OPTIMIZATION))
    {
      ::Print(CurrencyProfit + " = SYMBOL_CURRENCY_PROFIT != ACCOUNT_CURRENCY = " + AccountCurrency);
      
      ::TesterStop();
    }
  }
};

CURRENCY_CHECK CurrencyCheck; // 低速のバリアントはテストできない

2018.07.01 00:00:00   TER = SYMBOL_CURRENCY_PROFIT != ACCOUNT_CURRENCY = USD
TesterStop() called on 0% of testing interval
 
// スクリプトは、利益が0でないすべてのポジションの手数料を設定する。
#property script_show_inputs

input double inCommission = 0.004; // 1ラウンドあたりのコミッション(0.004~20ユニット/サイド・パーミリオンの割合)
input bool inAdd = false;          // true - 現在の値に追加、false - 値を設定

#include <Symbol.mqh>

string CommissionToString( const double TickValue )
{
  const double Commission = 1 - TickValue;
  
  return("Commission = " + DoubleToString(Commission * 100, 5) + "% per round (" + DoubleToString(Commission * 1000000 / 2, 1) + " per million (one side))");
}

void OnStart()
{
  const SYMBOL Symb;
  
  if (Symb.IsCustom())
  {
    const double TickValue = Symb.GetProperty(SYMBOL_TRADE_TICK_VALUE);
    const double NewTickValue = inAdd ? TickValue * (1 - inCommission / 100) : 1 - inCommission / 100;
    
    if ((MessageBox(Symb.Name + "\nBefore: " + CommissionToString(TickValue) +
                   "\nAfter: " + CommissionToString(NewTickValue) + "\n\n Do you agree?", "Commission Change", MB_YESNO) == IDYES) &&
        Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, NewTickValue))
      MessageBox(Symb.Name + ": current " + CommissionToString(Symb.GetProperty(SYMBOL_TRADE_TICK_VALUE)));
  }
}


まだ機能していない

 

もしご面倒でなければ、シンボル・ライブラリを正しく使用してカスタム・シンボルを生成する方法の例が知りたいです。

利用可能なティック履歴を 正しくコピーする方法と、新しいチャート上に各ティックを生成する方法を知りたいです。

よろしくお願いします。

 
Igor Makanu:

もしご面倒でなければ、カスタムシンボルを生成するためにシンボルライブラリを正しく使用する方法の例を教えてほしい。

利用可能なティック履歴を 正しくコピーする方法と、各ティックを新しいチャートに生成する方法を知りたいです。そうすれば、"Market Watch" ウィンドウですべてが正しく表示されます。

よろしくお願いします。

// 反転記号の作成例

#include <fxsaber\ThirdPartyTicks\CustomSymbol.mqh> //https://www.mql5.com/ja/code/20225

CUSTOMSYMBOL CustomSymb(StringSubstr(_Symbol, 3, 3) + StringSubstr(_Symbol, 0, 3) + StringSubstr(_Symbol, 6)); // シンボルの作成

double ReversePrice( const double Price )
{
  return(Price ? NormalizeDouble(1 / Price, _Digits) : 0);
}

void ReverseTick( MqlTick &Tick )
{
  Tick.bid = ReversePrice(Tick.bid);
  Tick.ask = ReversePrice(Tick.ask);
  Tick.last = ReversePrice(Tick.last);
}

bool ReverseTicks( MqlTick &Ticks[] )
{
  for (int i = ArraySize(Ticks) - 1; i >= 0; i--)
    ReverseTick(Ticks[i]);
    
  return(true);
}

bool GetTicks( MqlTick &Ticks[] )
{
  return(CopyTicks(_Symbol, Ticks) > 0);
}

void OnInit()
{
  MqlTick Ticks[];
  
  if (CustomSymb.IsCustom() && GetTicks(Ticks) && ReverseTicks(Ticks) &&
      (CustomSymb.AddTicks(Ticks) > 0) && (CustomSymb.DataToSymbol() > 0) && CustomSymb.On())
    ChartOpen(CustomSymb.Name, PERIOD_CURRENT); // チャートを開く
}

void OnTick()
{  
  MqlTick Tick[1];
  
  if (CustomSymb.IsCustom() && SymbolInfoTick(_Symbol, Tick[0]) && ReverseTicks(Tick))
    CustomTicksAdd(CustomSymb.Name, Tick);
}
 
fxsaber:

ありがとう!

でも、あなたのライブラリーができることを理解するためには、簡単な例が必要なんだ。

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


例の実行 // 反転シンボルの作成例

数行で本物のカスタム・キャラクターを プログラムで作成できるのは素晴らしい!

SUS: ビルド1158で、コンパイル中に警告が表示されました:

expression not boolean Symbol.mqh 192 17

Symbol.mqh ファイルのメソッド bool IsCustom( void ) const
 
Igor Makanu:

SZY: ビルド1158でコンパイル中に警告が表示されました:

expression not boolean Symbol.mqh 192 17

Symbol.mqh ファイル内のメソッド bool IsCustom( void ) const

私は更新するのを忘れてしまった、私はすでにKBに私自身のコードの多くを持っている、私のMQLフォルダの野生について何を言うべきか...

更新しました。

 
fxsaber:

更新

を更新しました:

エラー0件、警告0件、コンパイル時間:1220ミリ秒

all OK, thanks!
 

こんにちは!

時間情報をオフセットしたカスタムシンボルにリストで先物をコピーすることは可能ですか?先物から低流動性の尾を持つ必要があるため、時間情報をシフトする必要があり、新しい先物への移行中に指標の計算に 影響を与える可能性があります。

私はちょうどそれが実際であるように、次々と先物を接着したい - 彼らの全履歴、およびExpert Advisorで取引が行われていない期間の日付にポイントを作るだけ。
 
Aleksey Vyazmikin:

こんにちは!

時間情報をオフセットしたカスタムシンボルにリストで先物をコピーすることは可能ですか?先物から低流動性の尾を持つ必要があるため、時間情報をシフトする必要があり、新しい先物への移行中に指標の計算に 影響を与える可能性があります。

私はちょうどそれが実際であるように、次々と先物を接着したい - 彼らの全履歴、およびExpert Advisorで取引が行われていない期間の日付にポイントを作るだけ。

ソース・データと糊付けのアルゴリズムがあれば、もちろん、そのような可能性はあります。新しいシンボルのティック・アーカイブの形成を記述するだけです。この履歴を使ったカスタム・シンボルの形成は、このブランチの例と同じ方法で行われます。


唯一の点は、バー形成の価格と、どの価格で成行注文が執行されるかを決める必要があるということです。私はラストプライスを除外しますが、何が必要かは誰でも自由に決めることができます。

 
fxsaber:

ソース・データとグルーイング・アルゴリズムがあれば、もちろんそのような可能性はある。新しいシンボルのティック・アーカイブの形成を記述するだけでよい。この履歴を使ったカスタム・シンボルの形成は、このブランチの例と同じ方法で行われます。


唯一の点は、バー形成の価格と、どの価格で成行注文が執行されるかを決める必要があるということです。私はラストプライスを除外しますが、何が必要かは誰でも自由に決めることができます。

もちろん、最初のデータはターミナルにあります。ティック・アーカイブを形成するとはどういう意味ですか?一般的に、私はM1でOHLCをテストしたいと思います。

なぜ最終価格を好まないのですか?私はバー形成価格について理解していません。一般的に、私は別の先物と同じことを必要とし、それがどのような設定で、実際のものと一致しないという事実、それは明らかであるように - 私の観察によると、すべてのティックでテストする場合は、平均してマイナスに5ポイントを置く必要があります。

そのようなスクリプトで私を助けることができますか?