U
    g?                     @   sN   d dl mZmZ d dlZd dlZee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   F/home/worker/MarketYantra/Yantra/yantra/trading/Strategies/strategy.pygetStrategyQueueId   s    r   c                   @   s   e Zd Zd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 )"StrategyN)returnc                 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 }d zvzDt jj|d }|rJtd|j  }t||j}|| |}W n, t	k
rx } zt
| W 5 d }~X Y nX W 5 |  S X  )N)r   ztrading.Strategies.)r   objectsfilterfirst	importlibimport_module	classNamelowergetattr	Exceptionloggerdebug)r   r   r	   instancestmoduleclass_er   r   r   getStrategyInstance   s     zStrategy.getStrategyInstancec                 C   s
   t   d S r   raiseParentFunctionCallr   r   r   r   getActiveSetup    s    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   s   dS )NTr   r+   r   r   r   requireOrderCallback1   s    zStrategy.requireOrderCallbackc                 C   s   dS )NFr   r+   r   r   r   requireTickCallback5   s    zStrategy.requireTickCallbackc                 C   s   g S r   r   r+   r   r   r   getScriptForTickCallback9   s    z!Strategy.getScriptForTickCallbackc                 C   s*   t jj| j| jd }|r"|jS d 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 )Nr2    )r   r3   r4   taskId)r   r   r   r   r   r   r4   save)r   r5   statr   r   r   	setStatusD   s    zStrategy.setStatusc                 C   s
   t   d S r   r)   r+   r   r   r   initiateQ   s    zStrategy.initiatec                 C   s
   t   d S r   r)   r+   r   r   r   startT   s    zStrategy.startc                 K   s
   t   d S r   r)   )r   ZdefOrderCallbackargsr   r   r   processOrderCallbackW   s    zStrategy.processOrderCallbackc                 K   s
   t   d S r   r)   )r   ZdefTickCallbackr>   r   r   r   processTickCallbackZ   s    zStrategy.processTickCallbackr7   c                 C   s
   t   d S r   r)   )r   useridorderIdbrokerAccountIdverboseOrderr5   r   r   r   createOrderLog]   s    zStrategy.createOrderLog)N)r7   )__name__
__module____qualname__r   staticmethodr(   r,   propertyr-   r/   r0   r1   r6   r;   r<   r=   r?   r@   rE   r   r   r   r   r   
   s$   


r   c                   C   s   t dd S )Nz?Parent method called, please redefine the method in child class)r    r   r   r   r   r*   `   s    r*   )r   )trading.modelsr   r   r   logging	getLoggerrF   r!   r   r   r*   r   r   r   r   <module>   s   

V