o
    Ѣf#                     @   s<   d dl mZmZ d dlZd
ddZG dd dZdd	 ZdS )    )StrategyStatus	StrategisNOc                 C   s   |  d| d| d| S )N: )MasterQueueclientIdexchangetyper   r   MD:\Janisar\Projects\Python\Genie\myGenie\trading\views\Strategies\strategy.pygetStrategyQueueId   s   r   c                   @   s   e Zd Zd ddZedd Zdd Zed!d	d
Zedd Z	edd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd"ddZdS )#StrategyreturnNc                 C   s"   || _ d | _d | _g | _d | _d S N)UsercodeStrategyMasterActiveAccountsSetups)selfuserr   r   r   __init__	   s
   
zStrategy.__init__c              
   C   s   d }zAz(t jj|d }|r(td|j  }t||j}|| |}W W |S W W |S  t	yC } zt
| W Y d }~W |S d }~ww |     Y S )N)r   ztrading.views.Strategies.)r   objectsfilterfirst	importlibimport_module	classNamelowergetattr	Exceptionprint)r   r   r	   instancestmoduleclass_er   r   r   getStrategyInstance   s    zStrategy.getStrategyInstancec                 C   
   t   d S r   raiseParentFunctionCallr   r   r   r   getActiveSetup      
zStrategy.getActiveSetupc                 C   s>   | j jsdS |s| j}|d krtd| j |  }|d kS )NFz"No user defined for strategy code )r   isActiver   r    r   r,   )r   r   setupsr   r   r   r.   "   s   zStrategy.isActivec                 C      dS )NTr   r+   r   r   r   requireOrderCallback0      zStrategy.requireOrderCallbackc                 C   r0   )NFr   r+   r   r   r   requireTickCallback4   r2   zStrategy.requireTickCallbackc                 C   s   g S r   r   r+   r   r   r   getScriptForTickCallback8   r2   z!Strategy.getScriptForTickCallbackc                 C   s&   t jj| j| jd }|r|jS d S )Nr   strategy)r   r   r   r   r   r   
currStatus)r   statusr   r   r   	getStatus<   s   zStrategy.getStatusc                 C   sD   t jj| j| jd }|r||_n
t | j| j|dd}|  d S )Nr5    )r   r6   r7   taskId)r   r   r   r   r   r   r7   save)r   r8   statr   r   r   	setStatusC   s   zStrategy.setStatusc                 C   r(   r   r)   r+   r   r   r   initiateP   r-   zStrategy.initiatec                 C   r(   r   r)   r+   r   r   r   startS   r-   zStrategy.startc                 K   r(   r   r)   )r   ZdefOrderCallbackargsr   r   r   processOrderCallbackV   r-   zStrategy.processOrderCallbackc                 K   r(   r   r)   )r   ZdefTickCallbackrA   r   r   r   processTickCallbackY   r-   zStrategy.processTickCallbackr:   c                 C   r(   r   r)   )r   useridorderIdbrokerAccountIdverboseOrderr8   r   r   r   createOrderLog\   r-   zStrategy.createOrderLog)r   Nr   )r:   )__name__
__module____qualname__r   staticmethodr'   r,   propertyr.   r1   r3   r4   r9   r>   r?   r@   rB   rC   rH   r   r   r   r   r      s&    



r   c                   C   s   t d)Nz?Parent method called, please redefine the method in child class)r    r   r   r   r   r*   _   s   r*   )r   )trading.modelsr   r   r   r   r   r*   r   r   r   r   <module>   s
    
W