Thursday, June 4, 2020

iqoption robot code sample 1 sma5 trade

โคด ตั้วอย่าง
https://colab.research.google.com/drive/1DXkTXZ-eiQ1Jio_tzyuTsHjdy0R5IQLT#scrollTo=2yu0huE3czMh&line=216&uniqifier=1


import os
from iqoptionapi.stable_api import IQ_Option
import logging
import time
import secrets
from datetime import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
# from mpl_finance import candlestick_ohlc
import pandas as pd
import matplotlib.dates as mpl_dates
import talib

import plotly.graph_objs as go
from plotly.offline import plot

from pyti.smoothed_moving_average import smoothed_moving_average as sma
from pyti.exponential_moving_average import exponential_moving_average as ema
global short_time
global b
global result
global x
short_time=0
cnt=0
result=0
x=0
# logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s')
print("login...")
I_want_money=IQ_Option("xxxx@hotmail.com","12345678aabbccddeeff")
check, reason=I_want_money.connect()#connect to iqoption
print(check)#, reason)
#I_want_money.connect()#connect to iqoption
print(I_want_money.reset_practice_balance())
#goal="USDCHF-OTC"
class TradingModel:
  def __init__(selfsymbol,size,maxdict,Money,x,expirations_mode):
    self.symbol = symbol[x]
    self.size = size
    self.maxdict = maxdict
    self.Money=Money
    self.expirations_mode= expirations_mode
    self.df = self.getData()

  # Returns true if stream1 crossed under stream2 in most recent candle, stream2 can be integer/float or data arra



  def getData(self):

        # print("start stream...")
    I_want_money.start_candles_stream(self.symbol,self.size,self.maxdict)
        #DO something
    # print("Please wait now collecting candlestick data...",self.symbol)

    candles=I_want_money.get_realtime_candles(self.symbol,self.size)
    inputs = {
                        'time': np.array([]).astype(int),
                        'open': np.array([]).astype(float),
                        'high': np.array([]).astype(float),
                        'low': np.array([]).astype(float),
                        'close': np.array([]).astype(float),
                        'volume': np.array([]).astype(float)
                }
    for timestamp in candles:
        #    ((datetime.utcfromtimestamp(int(data_ohlc['from'])).strftime('%Y-%m-%d %H:%M:%S'))
                # inputs["time"]=np.append(inputs["time"],candles[((datetime.utcfromtimestamp(int(candles['from'])).strftime('%Y-%m-%d %H:%M:%S'))] )
        inputs["time"]=np.append(inputs["time"],candles[timestamp]['from'] )
        inputs["open"]=np.append(inputs["open"],candles[timestamp]["open"] )
        inputs["high"]=np.append(inputs["high"],candles[timestamp]["max"] )
        inputs["low"]=np.append(inputs["low"],candles[timestamp]["min"] )
        inputs["close"]=np.append(inputs["close"],candles[timestamp]["close"] )
        inputs["volume"]=np.append(inputs["volume"],candles[timestamp]["volume"] )
    df = pd.DataFrame(inputs)#,columns=['time', 'open', 'high', 'low', 'close', 'volume'])#,index=0, parse_dates=True)

    df=df.sort_index()
  
    df['H-L'] = df['high'] - df['low']
    df['O-C'] = df['open']-df['close'
    df['SMA5'] = df['close'].shift(1).rolling(window = 5).mean()
    df['newATR'] = talib.ATR(df['high'], df['low'], df['close'], timeperiod=14)

    # os.system('cls')  # on windows
    # print(df.loc[35:])
    return df

  def strategy(self):

    df = self.df


    print(df['high'].iloc[self.maxdict-3],round(df['SMA5'].iloc[self.maxdict-3],6),df['low'].iloc[self.maxdict-3])
    print(df['high'].iloc[self.maxdict-3]-round(df['SMA5'].iloc[self.maxdict-3],6),df['low'].iloc[self.maxdict-3]-round(df['SMA5'].iloc[self.maxdict-3],6)," atr ",df['newATR'].max())
    print("high to SMA5\t",round(df['high'].iloc[self.maxdict-3]-df['SMA5'].iloc[self.maxdict-3]-(1.1*df['newATR'].max()),6))
    print("SMA5 to low \t",round(df['SMA5'].iloc[self.maxdict-3]-df['low'].iloc[self.maxdict-3]-(1.1*df['newATR'].max()),6))
    distantce_high_to_sma=round(df['high'].iloc[self.maxdict-3]-df['SMA5'].iloc[self.maxdict-3]-(1.1*df['newATR'].max()),6)
    distantce_sma_to_low=round(df['SMA5'].iloc[self.maxdict-3]-df['low'].iloc[self.maxdict-3]-(1.1*df['newATR'].max()),6)
    sma_in_candle=df['high'].iloc[self.maxdict-3] > df['SMA5'].iloc[self.maxdict-3] > df['low'].iloc[self.maxdict-3]
    bearish_candle=df['O-C'].iloc[self.maxdict-2]>0  and distantce_sma_to_low>0
    bullish_candle=df['O-C'].iloc[self.maxdict-2]<0 and distantce_high_to_sma>0
    lower_wick_bull=(df['open']-df['low']).iloc[self.maxdict-3]
    upper_wick_bull=(df['high']-df['close']).iloc[self.maxdict-3]
    lower_wick_bear=(df['close']-df['low']).iloc[self.maxdict-3]
    upper_wick_bear=(df['high']-df['open']).iloc[self.maxdict-3]
    print(lower_wick_bull,upper_wick_bull)
    print(lower_wick_bear,upper_wick_bear)
    

    for i in range(1len(df['close'])):
      if distantce_high_to_sma>df['newATR'].max():
        print("candle far above SMA5",distantce_high_to_sma)
        self.sell()
        break

      if distantce_sma_to_low>df['newATR'].max():
        print("candle far below SMA5",distantce_sma_to_low)
        self.buy()
        break


  

  def buy(self):
    Money=self.Money
    ACTIVES=self.symbol
    ACTION="call"#or "put"


    check,id=I_want_money.buy(Money,ACTIVES,ACTION,self.expirations_mode)

    if check:
       print(ACTIVES," !buy!",self.Money)
    else:
       print(ACTIVES," buy fail")
       pass#time.sleep(5)

    result=(I_want_money.check_win_v3(id))
    print(result)
##    return result



  def sell(self):
    Money=self.Money
    ACTIVES=self.symbol
    ACTION="put"#or "put"


    check,id=I_want_money.buy(Money,ACTIVES,ACTION,self.expirations_mode)

    if check:
       print(ACTIVES," !sell!",self.Money)
    else:
       print(ACTIVES," sell fail")
       pass#time.sleep(5)

    result=(I_want_money.check_win_v3(id))
    print(result)
##    return result

  # def unloadcandle(self):
  #   print("stop candle")
  #   I_want_money.stop_candles_stream(self.symbol,self.size)


def Main():

    b=0
    s=0
    martinggale=1
    balance=I_want_money.get_balance()
    print("balance = ",balance)



##    symbol = ["AUDJPY","EURUSD","EURJPY","GBPUSD","AUDUSD","USDJPY"]
    symbol = ["EURUSD","NZDUSD","AUDCAD","EURNZD","AUDJPY","GBPAUD","GBPCAD"]
    cnt=len(symbol)
    # print(cnt," SYMBOL IN LIST")

    size=30#"all"#size=[1,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,28800,43200,86400,604800,2592000,"all"]

    maxdict=40
    trigger_level=0
    Money=1000
    randoms=[1,2.5,3]
    martinggale=secrets.choice(randoms)
    Money=Money*martinggale
    print("Invest money = ",Money)


    expirations_mode=2



    remaning_time=I_want_money.get_remaning(expirations_mode)

    model = TradingModel(symbol,
                         size,
                         maxdict,
                         Money,
                         x,
                         expirations_mode)

    model.strategy()




if __name__ == '__main__':
  while check:
    x=x
    Main()
    


iqoption robot ฉบับคนเขียนโปรแกรม ไม่เป็น

หากกล่าวถึงเรื่อง โรบอต ในการเทรด
โดยเฉพาะ กับ Iqoption ด้วยแล้ว
ทุกคนก็ ร้อง ยี้ๆๆๆๆ เข็ด
ก็ ตาม ประสบการณ์ นะครับ
อย่างไรก็ตาม
มันก็ ยังมีข้อดี อยู่บ้าง โปรดอ่านก่อน😝
1. มันเป็น การเรียบเรียง ความคิด หรือ ไอเดีย ในการ เทรด ของเราเอง
เพราะฉนั้น มันจะต้องออกมาจาก ทักษะของเราเอง เมื่อเราฝึก มาอย่างดีแล้ว เรามาเรียบเรียงขั้นตอน ตามลำดับ มันย่อม ไม่ต่างอะไรจากเรา
2.เมื่อ เรา เทรดเอง จะมีอาการเกร็ง เมื่อ ออกไม้ ขนาดใหญ่ บางครั้ง สถานการณ์ พลิกผัน เรา ตื่นเต้น ทำให้ หลุดแผน ในการเทรด ไปบ้าง
การเทรด สำคุัญที่ การวางแผน และดำเนินการ ตามแผนอย่าง รัดกุม
การให้ บอต มาช่วยลดความกดดันเป็นเรื่องที่ดี
3. หลายคน อาจจะคาดหวังว่า โรบอต ในอุดมคติ คือ ไร้ที่ติ ทำได้ ทุกอย่าง
เทรด ย่อม ไม่แพ้ ซึ่ง นั้นเป็นการเข้าใจผิดอย่างมาก
เรา ควบคุม โรบอตได้ แต่ ตลาด เรา ไม่สามารถควบคุม อะไรได้
ผลการเทรด ก็เช่นกันครับ จงเขียนแผน แล้ว ทำตามนั้นซะ
4.เราเทรด บนพื้นฐานความเข้าใจ แล้ว เอา วิธีการมาเรียง เป็นคำสั่ง เงื่อนไข เช่น ถ้าเราแพ้ 3 ครั้งติดกัน เลิกเทรด หยุดเทรด วันนั้น
โรบอต ก็ ต้องทำอย่างนั้นเช่นกันครับ
เอาหละ เราจะมาเริ่มกัน
สื่งที่ต้องเตรียม ก่อนจะเขียนโรบอต
ศึกษา หรือ ติดตั้ง สคริป โปรแกรม ตาม รายการข้างล่างนี้
==================================
must install
==================================
install python 3.83 x86 32bit version
python -m pip install --upgrade pip
pip install configparser
pip install matplotlib
pip install ZigZag
pip install plotly
pip install pyti
pip install finta
search for TA_Lib and download it then install as below
pip install TA_Lib-0.4.18-cp38-cp38-win32.whl
and finally iqoption API
dowload and unzip install as below
python setup.py install
more study from here
==================================
option
==================================
pip install mpl_finance
pip install mpl-finance
pip install mplfinance
zigzag indicator using