Ejemplo n.º 1
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('direction', 'choice', ['label' => 'Направление открытия сделки', 'required' => true, 'choices' => Signal::getDirectionsNames()]);
     $builder->add('indicatorValues', 'collection', ['label' => false, 'type' => new IndicatorValueType(), 'allow_add' => true, 'allow_delete' => true]);
     $builder->add('addIndicator', 'button', ['label' => 'Добавить индикатор', 'attr' => ['class' => 'addIndicator']]);
     $builder->add('stopLossPercent', 'integer', ['label' => 'Стоп лосс при достижении просадки (в % от цены открытия)', 'required' => false, 'attr' => ['max' => 100, 'min' => 0]]);
     $builder->add('takeProfitPercent', 'integer', ['label' => 'Тейк профит при достижении прибыли (в % от цены открытия)', 'required' => false, 'attr' => ['max' => 100, 'min' => 0]]);
     $builder->add('stopLoss', 'integer', ['label' => 'Стоп лосс (в валюте депозита)', 'required' => false]);
     $builder->add('takeProfit', 'integer', ['label' => 'Тейк профит (в валюте депозита)', 'required' => false]);
     $builder->add('deleteSignal', 'button', ['label' => 'Удалить сигнал', 'attr' => ['class' => 'deleteSignal']]);
 }
Ejemplo n.º 2
0
 /**
  * Проверка на срабатывание всех индикаторов сигнала
  * @param Price  $priceObject
  * @param int    $direction
  * @param Signal $signal
  * @return bool
  */
 private function indicatorsPassed(Price $priceObject, $direction, Signal $signal)
 {
     $indicatorValues = $signal->getIndicatorValues();
     $indicatorsPassed = 0;
     foreach ($indicatorValues->toArray() as $indicatorValueObject) {
         /** @var IndicatorValue $indicatorValueObject */
         $indicator = $indicatorValueObject->getIndicator();
         $indicatorMethod = 'get' . $indicator->getStrategyMethod();
         $priceIndicatorValue = $priceObject->{$indicatorMethod}();
         $indicatorValue = $indicatorValueObject->getValue();
         // Если индикатор является коммулятивным
         if ($priceIndicatorValue > 1) {
             $indicatorValue = Signal::SIGNAL_MAXIMUM_BUY;
         } elseif ($priceIndicatorValue < -1) {
             $indicatorValue = Signal::SIGNAL_MAXIMUM_SELL;
         }
         if ($direction == $signal::DIRECTION_BUY && $priceIndicatorValue >= $indicatorValue || $direction == $signal::DIRECTION_SELL && $priceIndicatorValue <= $indicatorValue) {
             $indicatorsPassed++;
         }
     }
     return $indicatorsPassed == count($indicatorValues);
 }
Ejemplo n.º 3
0
 /**
  * Название направления сделки
  * @param int $direction
  * @return string
  */
 public function getDirectionName($direction)
 {
     $directionNames = Signal::getDirectionsNames();
     return array_key_exists($direction, $directionNames) ? $directionNames[$direction] : '';
 }