TesterWithdrawal

Função especial para emular a operação de saque de dinheiro no processo de teste. Pode ser usado em alguns sistemas de gerenciamento de ativos.

bool  TesterWithdrawal(
   double money      // a soma para sacar
   );

Parâmetros

money

[in]  A soma de dinheiro que nós precisamos sacar (no moeda de depósito).

Valor do Retorno

Com sucesso, retorna verdadeiro (true), do contrário - falso.

Exemplo:

//--- defines
#define BALANCE_PROFIT_WITHDRAWAL   5  // valor do lucro no saldo, presente quando os fundos serão retirados da conta no tester.
 
//--- input parameters
input  double  InpLots        =  0.1;  // Lots
input  uint    InpStopLoss    =  50;   // Stop loss in points
input  uint    InpTakeProfit  =  150;  // Take Profit in points
sinput ulong   InpMagic       =  123;  // Magic number
sinput ulong   InpDeviation   =  5;    // Deviation
//--- global variables
CTrade      trade;                     // instância da classe de negociação
CSymbolInfo symb;                      // instância da classe de símbolo
CAccountInfo account;                  // instância da classe de conta de negociação
...
double      balance_op_sum;            // total de operações de saldo
uint        balance_op_total;          // número de operações de saldo
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ...
//--- salvamos os valores do saldo inicial
   balance_prev=account.Balance();
   balance_op_sum=0;
   balance_op_total=0;
//--- inicialização bem-sucedida
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Atualizamos as cotações atuais
   if(!symb.RefreshRates())
      return;
   ...
 
//--- se o lucro no saldo for maior que o saldo atual no valor indicado na macrosubstituição BALANCE_PROFIT_WITHDRAWAL,
//--- consideramos necessário retirar esses fundos da conta e chamamos a função TesterWithdrawal()
//--- Verificamos o lucro no saldo mais do que em BALANCE_PROFIT_WITHDRAWAL
   if(balance_prev!=account.Balance())
     {
      if(account.Balance()>balance_prev+BALANCE_PROFIT_WITHDRAWAL)
        {
         double profit=account.Balance()-balance_prev;
         PrintFormat("The account balance has been increased by %.2f %s. Need to withdraw these funds from the account.",profit,account.Currency());
         if(TesterWithdrawal(profit))
           {
            balance_op_total++;
            balance_op_summ+=profit;
            balance_prev=account.Balance();
            PrintFormat("Funds have been withdrawn from the account. Account balance: %.2f %s.",account.Balance(),account.Currency());
            PrintFormat("Total withdrawals: %lu. Amount of withdrawals: %.2f %s.",balance_op_total,balance_op_summ,account.Currency());
           }
         /*
        Resultado:
         The account balance has been increased by 21.00 USDNeed to withdraw these funds from the account.
         deal #13 balance -21.00 [withdrawaldone
         Funds have been withdrawn from the accountAccount balance10000.00 USD.
         Total withdrawals1Amount of withdrawals21.00 USD.
         */
        }
     }
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- O valor de saída do manipulador indicará o valor máximo de drawdown do saldo em dinheiro
   double ret=TesterStatistics(STAT_BALANCE_DD);
//--- Exibimos no jornal a mensagem sobre o drawdown, sobre o número de retiradas e seu total
   PrintFormat("%s: Maximum balance drawdown in money: %.2f %s. Total withdrawals: %lu. Amount of withdrawals: %.2f %s.",__FUNCTION__,ret,account.Currency(),balance_op_total,balance_op_summ,account.Currency());
//--- Retornamos o resultado
   return(ret);
   /*
  Resultado:
   OnTesterMaximum balance drawdown in money5188.50 USDTotal withdrawals2Amount of withdrawals36.00 USD.
   final balance 4867.50 USD
   OnTester result 5188.5
   */
  }

Veja também

TesterDeposit