TesterDeposit

テスト中の資金入金をエミュレートする特殊関数です。資金管理システムの一部で使用することができます。

bool  TesterDeposit(
  double money      // 入金額
  );

パラメータ

money

[in] 預金通貨での口座への入金

戻り値

成功の場合は true、それ以外の場合は false

 

例:

//--- define
#define BALANCE_LOSS_DEPOSIT 100.0   // テスターの口座に資金が入金される残高ドローダウンの値
 
//--- 入力パラメータ
input double InpLots        = 0.1; // ロット
input uint   InpStopLoss    = 50;   // ポイント単位のストップロス
input uint   InpTakeProfit  = 150; // ポイント単位のテイクプロフィット
sinput ulong   InpMagic       = 123; // マジックナンバー
sinput ulong   InpDeviation   = 5;   // 偏差
//--- グローバル変数
CTrade     trade;                     // 取引クラスのインスタンス
CSymbolInfo symb;                     // 銘柄クラスのインスタンス
CAccountInfo account;                 // 取引口座クラスのインスタンス
...
double     balance_dep_summ;         // 残高チャージ総額
uint       balance_dep_total;         // 残高チャージ数
//+------------------------------------------------------------------+
//| エキスパート初期化関数                                                |
//+------------------------------------------------------------------+
int OnInit()
 {
  ...
//--- 初期バランス値を保存する
  balance_prev=account.Balance();
  balance_dep_summ=0;
  balance_dep_total=0;
//--- 正常な初期化
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| エキスパートティック関数                                                 |
//+------------------------------------------------------------------+
void OnTick()
 {
//--- 現在の相場を更新する
  if(!symb.RefreshRates())
    return;
  ...
 
//--- BALANCE_LOSS_DEPOSITマクロ置換で示されている以上に残高が減少した場合、
//--- 口座にチャージしてTesterDeposit()関数を呼び出す必要がある
//--- BALANCE_LOSS_DEPOSITを超える残高の損失を確認する
  if(balance_prev!=account.Balance())
    {
    if(account.Balance()<balance_prev-BALANCE_LOSS_DEPOSIT)
       {
        double loss=balance_prev-account.Balance();
        PrintFormat("The initial balance of %.2f %s decreased by %.2f %s. It is necessary to make a deposit to the account for %.2f %s.",balance_prev,account.Currency(),loss,account.Currency(),loss,account.Currency());
        if(TesterDeposit(loss))
          {
          balance_dep_total++;
          balance_dep_summ+=loss;
          balance_prev=account.Balance();
          PrintFormat("Funds have been deposited into the account. Account balance: %.2f %s.",account.Balance(),account.Currency());
          PrintFormat("Total deposits: %lu. Amount of deposits: %.2f %s.",balance_dep_total,balance_dep_summ,account.Currency());
          }
        /*
        結果:
        The initial balance of 10000.00 USD decreased by 116.00 USD. It is necessary to make a deposit to the account for 116.00 USD.
        deal #45 balance 116.00 [deposit] done
        Funds have been deposited into the account. Account balance: 10000.00 USD.
        Total deposits: 1. Amount of deposits: 116.00 USD.
        */
       }
    }
 }
//+------------------------------------------------------------------+
//| テスタ関数                                                          |
//+------------------------------------------------------------------+
double OnTester()
 {
//--- 最大残高ドローダウンを金額換算で出力ハンドラー値として設定する
  double ret=TesterStatistics(STAT_BALANCE_DD);
//--- ドローダウン、入金数、その合計額に関するメッセージをログに表示する
  PrintFormat("%s: Maximum balance drawdown in money: %.2f %s. Total deposits: %lu. Amount of deposits: %.2f %s.",__FUNCTION__,ret,account.Currency(),balance_dep_total,balance_dep_summ,account.Currency());
//--- 結果を返す
  return(ret);
  /*
  結果:
  OnTester: Maximum balance drawdown in money: 5188.50 USD. Total deposits: 46. Amount of deposits: 5128.50 USD.
  final balance 4867.50 USD
  OnTester result 5188.5
  */
 }

参照

TesterWithdrawal