Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.68 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. if(!isset($_POST['amount'])){
  5.    
  6.     $form = "
  7.     <form action='http://ezforex.autopilottools.com/simulador/' method='post'>
  8.         <p>Valor base para cálculo do investimento:<br />
  9.         <input name='amount' type='number' value='100' step='10' /></p>
  10.         <p>Comportamento Delta:<br />
  11.         <select name='trailing' type='select'>
  12.             <option value='delta_amount'>Delta nunca pode ultrapassar valor inicial</option>
  13.             <option value='all_in'>Arriscar todo o valor inicial sempre</option>
  14.         </select></p>
  15.         <p>Quantas x o valor base estará depositado na corretora:<br />
  16.         <input name='margin' type='number' value='2' step='1' /></p>
  17.         <p>Alvo é multiplicar capital por quanto:<br />
  18.         <input name='target' type='number' value='2' step='1' /></p>
  19.         <p>Nível máximo de risco aceito:<br />
  20.         <input name='max_risk_level' type='number' value='10' step='1' /></p>
  21.         <p>Comportamento com relação a risco máximo:<br />
  22.         <select name='stop_on_max_risk_level' type='select'>
  23.             <option value='stop'>Parar quando alcançar risco máximo</option>
  24.             <option value='continue'>Continuar mas sem subir mais o risco</option>
  25.             <option value='reset'>Voltar para risco inicial</option>
  26.         </select></p>
  27.         <p>Aumentar risco imediatamente após perda:<br />
  28.         <select name='risk_leverage' type='select'>
  29.             <option value='agressive'>Quando perder, já aumentar risco no próximo trade</option>
  30.             <option value='conservative'>Aumentar risco somente após fechar ciclo</option>
  31.         </select></p>
  32.         <p>Limitar o risco de cada trade a quantas vezes amount inicial (0 para não limitar):<br />
  33.         <input name='trade_risk' type='number' value='10' step='1' /></p>
  34.         <p>Usar manejo pra recuperar LUCRO ou apenas PERDA:<br />
  35.         <select name='try_to_recover_from' type='select'>
  36.             <option value='base_capital'>Tentar voltar para lucro máximo</option>
  37.             <option value='original_capital'>Tentar voltar para capital inicial</option>
  38.         </select></p>
  39.         <p>Comportamento com relação a risco máximo:<br />
  40.         <select name='select' type='select'>
  41.             <option value='rand'>Par ou Ímpar (Escolha aleatórea)</option>
  42.             <option value='odd'>Par ou Ímpar (Par)</option>
  43.             <option value='even'>Par ou Ímpar (Ímpar)</option>
  44.             <option value='digit_rand'>Dígito Final (Escolha Aleatórea)</option>
  45.             <option value='digit_fixed'>Dígito Final (Escolher 1 e manter sempre)</option>
  46.             <option value='digit_last'>Dígito Final (Usar o último resultado)</option>
  47.         </select></p>
  48.         <p>Número limite de trades (7200 = 24h):<br />
  49.         <input name='trade_limit' type='number' value='7200' step='100' /></p>
  50.         <p>Índice de alteração do risco a cada novo Nível:<br />
  51.         <input name='risk_multiplier' type='number' value='2' step='0.1' /></p>
  52.         <p>Como aplicar o Índice de alteração:<br />
  53.         <select name='multiplier_type' type='select'>
  54.             <option value='pow'>Potenciação</option>
  55.             <option value='inc'>Multiplicação Simples</option>
  56.         </select></p>
  57.         <p>Risco inicial em %:<br />
  58.         <input name='initial_risk' type='number' step='0.1' value='3' /></p>
  59.         <p>Usar risco fixo ou subir:<br />
  60.         <select name='risk_type' type='select'>
  61.             <option value='amount'>Sempre relativo ao Amount Inicial</option>
  62.             <option value='base_capital'>Relativo ao Capital Base</option>
  63.         </select></p>
  64.         <p><input type='submit' value='Bora ver...' /></p>
  65.        
  66.        
  67.     </form>";
  68.     echo $form;
  69.    
  70.     die();
  71. }
  72.  
  73. $settings = $_POST;
  74.  
  75. $base_capital = $settings['amount'];
  76. $current_capital = $settings['amount'];
  77. $current_multiplier = $settings['initial_risk'];
  78. $trades_current_cycle = 0;
  79. $risk_level = 1;
  80. $relatorio['max_loss'] = 0;
  81. $relatorio["top_gain"] = $settings['amount'];
  82. $relatorio['max_risk_level'] = 1;
  83. $relatorio['total_trades'] = 0;
  84. $relatorio['total_gains'] = 0;
  85. $relatorio['total_losses'] = 0;
  86. $relatorio['max_invest'] = 0;
  87. $html = "";
  88. $table = "<table style='width: 100%; text-align:center; border:solid; border-width:2px;'>
  89.             <tr>
  90.                 <th>Capital Base</th>
  91.                 <th>Capital Atual</th>
  92.                 <th>Nível de Risco</th>
  93.                 <th>Trades no Risco Atual</th>
  94.                 <th>Delta</th>
  95.             </tr>";
  96.  
  97. while($total_trades < $settings['trade_limit']){
  98.        
  99.     $loss = 0;
  100.     $gain = 0;
  101.     $increased = 0;
  102.    
  103.     $digit = rand(0,9);
  104.    
  105.     switch($settings['select']){
  106.         case "even":
  107.             if($digit & 1){
  108.                 $loss = 1;
  109.             }else{
  110.                 $gain= 1;
  111.             }
  112.             $rr = 0.96;
  113.             break;
  114.         case "odd":
  115.             if($digit & 1){
  116.                 $gain = 1;
  117.             }else{
  118.                 $loss= 1;
  119.             }
  120.             $rr = 0.96;
  121.             break;
  122.         case "rand":
  123.             $odd = rand(0,1);
  124.             if($odd){
  125.                 if($digit & 1){
  126.                     $gain = 1;
  127.                 }else{
  128.                     $loss= 1;
  129.                 }
  130.             }else{
  131.                 if($digit & 1){
  132.                     $loss = 1;
  133.                 }else{
  134.                     $gain= 1;
  135.                 }
  136.             }
  137.             $rr = 0.96;
  138.             break;
  139.         case "digit_fixed":
  140.             if(empty($digit)){
  141.                 $digit = rand(0,9);
  142.             }
  143.            
  144.             $result_digit = rand(0,9);
  145.            
  146.             if($digit == $result_digit){
  147.                 $loss = 1;
  148.             }else{
  149.                 $gain = 1;
  150.             }
  151.             $rr = 0.0989;
  152.             break;
  153.         case "digit_last":
  154.             if(empty($result_digit)){
  155.                 $digit = rand(0,9);
  156.             }else{
  157.                 $digit = $result_digit;
  158.             }
  159.            
  160.             $result_digit = rand(0,9);
  161.            
  162.             if($digit == $result_digit){
  163.                 $loss = 1;
  164.             }else{
  165.                 $gain = 1;
  166.             }
  167.             $rr = 0.0989;
  168.             break;
  169.         case "digit_rand":
  170.            
  171.             $digit = rand(0,9);
  172.            
  173.             $result_digit = rand(0,9);
  174.            
  175.             if($digit == $result_digit){
  176.                 $loss = 1;
  177.             }else{
  178.                 $gain = 1;
  179.             }
  180.            
  181.             $rr = 0.0989;
  182.             break;
  183.     }
  184.    
  185.     $html .= "trades_current_cycle: $trades_current_cycle<br />";
  186.     $html .= "risk_level: $risk_level<br />";
  187.     $html .= "current_multiplier: ".calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])."<br />";
  188.    
  189.     if($settings['risk_type'] == "amount"){
  190.         $capital_reference = $settings['amount'];
  191.     }else{
  192.         $capital_reference = $base_capital;
  193.     }
  194.    
  195.     $current_gain = $rr*($capital_reference * (calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])/100));
  196.     //echo "$rr(rr) * ($base_capital(base_capital) * (".calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])."(risk_multiplier)/100)) = $current_gain (current_gain)<br />";
  197.     $current_risk = $capital_reference * (calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])/100);
  198.     //echo "$base_capital(base_capital) * (".calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])."(risk_multiplier)/100) = $current_risk (current_risk)<br />";
  199.    
  200.    
  201.     if($settings['trade_risk']){
  202.         if($current_risk > $settings['trade_risk']*$settings['amount']){
  203.             echo "Risco muito alto num trade específico<br />";
  204.             break;
  205.         }
  206.     }
  207.    
  208.     $relatorio['total_trades']++;
  209.     if($gain){
  210.         $relatorio['total_gains']++;
  211.         $current_capital += $current_gain;
  212.         if($settings['try_to_recover_from'] == "base_capital"){
  213.             $capital_to_compare = $base_capital;
  214.         }else{
  215.             $capital_to_compare = $settings['amount'];
  216.         }
  217.        
  218.         if($current_capital > $capital_to_compare){
  219.             $html .= "Gain<br />";
  220.             $base_capital = $current_capital;
  221.             $relatorio["top_gain"] = number_format($current_capital,2);
  222.             $trades_current_cycle = 1;
  223.             $risk_level = 1;
  224.         }else{
  225.             $html .= "Gain<br />";
  226.             $trades_current_cycle++;
  227.         }
  228.     }else{
  229.         $html .= "Loss<br />";
  230.         $relatorio['total_losses']++;
  231.         $current_capital -= $current_risk;
  232.        
  233.         if($settings['risk_leverage'] == "agressive"){
  234.             $trades_current_cycle = 1;
  235.             $risk_level++;
  236.             $increased = 1;
  237.                        
  238.             if($risk_level > $settings['max_risk_level']){
  239.                 $risk_level = $settings['max_risk_level'];
  240.             }
  241.            
  242.         }else{
  243.             $trades_current_cycle++;
  244.         }
  245.     }
  246.    
  247.     $table .= "<tr>
  248.                 <td style='border:solid; border-width:1px;'>".number_format($base_capital,2)."</td>
  249.                 <td style='border:solid; border-width:1px;'>".number_format($current_capital,2)."</td>
  250.                 <td style='border:solid; border-width:1px;'>$risk_level</td>
  251.                 <td style='border:solid; border-width:1px;'>$trades_current_cycle</td>";
  252.    
  253.     if($current_capital < 0){
  254.         $delta = $base_capital + abs($current_capital);
  255.     }else{
  256.         $delta = $base_capital - abs($current_capital);
  257.     }
  258.    
  259.     $html .= "delta: ".number_format($delta,2)."<br />";
  260.     $html .= "current_gain: ".number_format($current_gain,2)."<br />";
  261.    
  262.     if(($settings['risk_leverage'] == "agressive" && !$increased) || $settings['risk_leverage'] == "conservative"){
  263.    
  264.         if($delta <= $current_gain * 2){
  265.             $html .= "delta <= current gain<br />";
  266.             if($risk_level > 1){
  267.                 $trades_current_cycle = 0;
  268.                 $risk_level--;
  269.                 $gain_risk_level = $base_capital * (calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])/100);
  270.                 while($delta < ($gain_risk_level *2) || $risk_level == 1){
  271.                     $gain_risk_level = $base_capital * (calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])/100);
  272.                     if($risk_level > 1){
  273.                         $risk_level--;
  274.                     }else{
  275.                         break;
  276.                     }
  277.                 }
  278.             }
  279.         }else{
  280.             $html .= "delta > current gain<br />";
  281.             if($trades_current_cycle >= 10){
  282.                 if($current_gain > $delta){
  283.                     $html .= "** Zerando Ciclo - Delta < 1 **";
  284.                     $trades_current_cycle = 0;
  285.                 }else{
  286.                     $risk_level++;
  287.                     $relatorio['max_risk_level'] = $risk_level;
  288.                     $trades_current_cycle = 0;
  289.                 }
  290.             }
  291.         }
  292.     }
  293.    
  294.     $html .= "base_capital: ".number_format($base_capital,2)."<br />";
  295.     $html .= "current_capital: ".number_format($current_capital,2)."<br />";
  296.     $html .= "<br /><br />";
  297.    
  298.     if($delta > $relatorio['max_loss']){
  299.         $relatorio['max_loss'] = $delta;
  300.     }
  301.    
  302.     //$table .= "<td style='border:solid; border-width:1px;'>".number_format($delta,2)."</td>
  303.                 //<td style='border:solid; border-width:1px;'>".number_format($relatorio['max_loss'],2)."</td>";
  304.    
  305.     $total_trades++;
  306.    
  307.     $risk_next_level = $base_capital * (calculate_risk($risk_level,$settings['initial_risk'],$settings['risk_multiplier'],$settings['multiplier_type'])/100);
  308.    
  309.     if($current_risk > $relatorio['max_invest']){
  310.         $relatorio['max_invest'] = $current_risk;
  311.     }
  312.  
  313.     if($gain){
  314.         $table .= "<td style='color:green; font-weight:bold; border:solid; border-width:1px;'>+".number_format($current_gain,2)."</td>";
  315.     }else{
  316.         $table .= "<td style='color:red; font-weight:bold; border:solid; border-width:1px;'>-".number_format($current_risk,2)."</td>";
  317.     }
  318.     $table .= "</tr>";
  319.    
  320.    
  321.     //check if STOP
  322.     switch($settings['stop_on_max_risk_level']){
  323.         case 'stop':
  324.             if($risk_level == $settings['max_risk_level']){
  325.                 echo "Alcançou Level Máximo ({$settings['max_risk_level']})<br />";
  326.                 $stop_all = true;
  327.                 break;
  328.             }
  329.             break;
  330.         case 'continue':
  331.             if($risk_level > $settings['max_risk_level']){
  332.                 $risk_level = $settings['max_risk_level'];
  333.             }
  334.             break;
  335.         case 'reset':
  336.             if($risk_level > $settings['max_risk_level']){
  337.                 $risk_level = 1;
  338.             }
  339.             break;
  340.     }
  341.    
  342.     if($stop_all){
  343.         break;
  344.     }
  345.    
  346.     if(abs($delta) > ($settings['amount'])){
  347.         if($settings['trailing'] == "delta_amount"){
  348.             echo "STOPOU! Delta > amount inicial.<br />";
  349.             break;
  350.         }
  351.     }
  352.    
  353.     if($current_capital < 0){
  354.         if(($settings['amount'] * ($settings['margin']-1)) < abs(abs($current_capital) + $risk_next_level) ){
  355.             echo "STOPOU!<br />";
  356.             break;
  357.         }
  358.     }
  359.    
  360.     //check if GAIN
  361.     if($current_capital > ($settings['amount'] * $settings['target'])){
  362.         echo "TP!<br />";
  363.         break;
  364.     }
  365. }
  366.  
  367. $table .= "</table>";
  368.  
  369. function calculate_risk($risk_level,$init,$multiplier,$mult_type){
  370.    
  371.     if($risk_level == 1){
  372.         $final_multiplier = $init;
  373.     }else{
  374.         switch($mult_type){
  375.             case "pow":
  376.                 $final_multiplier = pow($multiplier,$risk_level-1);
  377.                 //return $init * $final_multiplier;
  378.                 break;
  379.             case "inc":
  380.                 $final_multiplier = $multiplier * $risk_level;
  381.                 //return $init * $final_multiplier;
  382.                 break;
  383.         }
  384.     }
  385.    
  386.     return $final_multiplier;
  387. }
  388.  
  389. $relatorio['balance'] = number_format($current_capital,2);
  390. $relatorio['profit'] = $current_capital - $settings['amount'];
  391. $relatorio['ratio_win'] = number_format(100*($relatorio['total_gains']/$relatorio['total_trades']),2)."%";
  392.  
  393. function build_table($data){
  394.     echo "<table style='width: 100%; text-align:center; border:solid; border-width:2px;'>";
  395.     $build_th = "<tr>";
  396.     $build_td = "<tr>";
  397.     foreach($data as $th=>$td){
  398.         $build_th .= "<th>$th</th>";
  399.         if(is_float($td)){
  400.             $build_td .= "<td style='border:solid; border-width:1px;'>".number_format($td,2)."</td>";
  401.         }else{
  402.             $build_td .= "<td style='border:solid; border-width:1px;'>$td</td>";
  403.         }
  404.        
  405.     }
  406.     $build_th .= "</tr>";
  407.     $build_td .= "</tr>";
  408.     echo $build_th;
  409.     echo $build_td;
  410.     echo "</table>";
  411. }
  412.  
  413. echo build_table($settings);
  414. echo "<br /><br />";
  415. echo build_table($relatorio);
  416. echo "<br /><br />";
  417. //echo $html;
  418. echo $table;
  419.  
  420.  
  421. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement