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

 
Stanislav Korotky:

買値と売値は入れ替わるべきではないのですか?

スプレッドがマイナスにならないようにするためです。

 
fxsaber:
// 反転記号の作成例

この例では、カスタム・シンボルの チャートをヒストリなしで開いています。バーの描画は現在のティックからのみ始まります。

ヒストリーを使うには?

+

expression not boolean  Symbol.mqh      192     17
 
ilvic:

この例では、カスタム・シンボルの チャートをヒストリなしで開いています。バーの描画は現在のティックからのみ始まります。

ヒストリーを使うにはどうすればよいでしょうか?

+

このスレッドにある例は、プログラミングに熱心な人のために、ライブラリーの機能を視覚的に示すものです。

ユーザー向けのスクリプトは、このスレッドでは公開されていません。

 

通常のMAに基づき、リアルタイムで更新される履歴を持つカスタム・シンボルを作成 しようとしています。

iMA(Symbol(),Period(),25,0,MODE_SMA,PRICE_OPEN);

ティックは重要ではなく、分単位です。

このコードを試してみました。

// 反転記号の作成例

#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 = iMA(Symbol(),Period(),25,0,MODE_SMA,PRICE_OPEN);
  Tick.ask = iMA(Symbol(),Period(),25,0,MODE_SMA,PRICE_OPEN);
  Tick.last = iMA(Symbol(),Period(),25,0,MODE_SMA,PRICE_OPEN);
}

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);
}

全く機能しません。

どなたか専門家の方、MAからカスタムシンボルを正しく作成する方法を教えていただけませんか?

 
erotin:

MAからカスタムキャラクターを正しく作成するには?

#include <Symbol.mqh> //https://www.mql5.com/ja/code/18855

bool FillPrices( MqlTick &Tick )
{
  static const int handle = iMA(Symbol(), Period(), 1, 0, MODE_SMA, PRICE_CLOSE);
  double Array[1];
  
  const bool Res = (CopyBuffer(handle, 0, 0, 1, Array) > 0);

  if (Res)
  {
    Tick.bid = Array[0];
    Tick.ask = Array[0];
    Tick.last = Array[0];
  }
    
  return(Res);
}

void OnTick()
{
  static const SYMBOL Symb("CUSTOM_" + _Symbol, NULL, _Symbol); // シンボルの作成
  static const bool Init = Symb.IsExist() && Symb.IsCustom() && Symb.On() && ChartOpen(Symb.Name, PERIOD_M1);
    
  MqlTick Tick[1];
  
  if (Init && SymbolInfoTick(_Symbol, Tick[0]) && FillPrices(Tick[0]))
// Symb += Tick;
    CustomTicksAdd(Symb.Name, Tick);
}
 
fxsaber:

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

このチャートにもう1年分のMA読み取り履歴を追加するには?

 
erotin:

このグラフにもう1年分のMAの読書履歴を追加するにはどうしたらいいでしょうか?

残りはすべて私がやらなくてもできる。

 
fxsaber:

ZY EURGBPで徹底的に測定しました。時間での利益は~2倍です。取引は完全に一致しています。本当に自由!

早速、Testerの新モードをpipsで確認。一回の実行結果


全てのシンボル通貨は口座通貨に設定されています。

final balance 107448.00 EUR
14853401 ticks, 254375 bars generated. Environment synchronized in 0:00:00.084. Test passed in 0:00:40.141 (including ticks preprocessing 0:00:04.524).


pipsによるモード

final balance 107448.00 pips
14853401 ticks, 254375 bars generated. Environment synchronized in 0:00:00.093. Test passed in 0:00:38.827 (including ticks preprocessing 0:00:04.508).


期間は誤差の範囲内で一致。

 

スイスクオートサーバーで デモ口座を開設し、このスクリプトを 実行すると、次のような行が表示されます。

2020.03.26 08:53:12.567 5, 5

これは、ティック履歴のBid/Ask価格がマーケットウォッチの価格と5ピップス異なることを意味します。

従って、TesterではTerminalで表示されているものを元のシンボルで再現することはできません。


唯一の解決策は、ティック履歴の対応するデマキャップに基づくカスタムシンボルを使用することです。

 

スタックの価格が チャートと異なるという問題です。

あるユーザーから、BookEventベースのインデューサーとチャートが同期していないと苦情を言われました。