파이썬으로 거래하기 - 페이지 3

 
Mikhael1983 # :

라이브러리에 설명된 함수를 사용하여 터미널과의 연결을 시작하고 터미널과의 연결을 종료하는 함수를 구현합니다. 5분마다 무한 루프로 이 작업을 수행할 계획입니다.

...

프로그램 운영:

이 모든 것은 mql5 도구를 사용하여 성공적으로 구현됩니다.

 
Vitaly Muzichenko # :

이 모든 것은 mql5 도구를 사용하여 성공적으로 구현됩니다.

당연히. 그러나 mql5에 익숙하지 않은 사람들이 많고, 특정 회사의 특정 단말로 극히 협소한 작업 영역에만 적용되는 구식 도구를 연구할 이유가 없다고 본다.
 

나는 질문에 대해 감사할 것이고, 설명을 할 수 있고, 어떻게 그리고 무엇을 할 수 있습니다.

따옴표를 파일에 저장하는 함수를 작성해 보겠습니다. 원칙적으로 파일에 따옴표를 저장할 필요가 전혀 없습니다. 그것들을 염두에 두기에 충분합니다. 나에게 이것은 역사적으로 터미널이 Windows 가상 머신 에 있고 Python 프로그램이 따옴표를 저장하고 모든 논리가 호스트 시스템인 Debian GNU/Linux에 있고 다음을 읽는 자체 Python 프로그램이 있다는 사실에서 비롯되었습니다. 이 파일을 읽고 가상 Windows의 Python 프로그램이 읽고 실행하는 다른 거래 명령 파일에 씁니다.

그러나 파일에 따옴표를 쓰는 것은 그 자체로 유용합니다. 분명히. 무슨 일이 일어났는지 보고, 느끼고, 다른 수단(동일한 Matkad)으로 읽을 수 있습니다. 이렇게 합시다.

def pips_definer(instrument): 
    '''
    Функция возвращает величину пипса для инструмента, например для EURUSD - 0.0001 , для USDJPY - 0.01 
    '''
     if instrument in ['EURUSD_i', 'GBPUSD_i', 'EURGBP_i', 'USDCHF_i', 'USDCAD_i']: 
         return 0.0001 
    elif instrument in ['USDJPY_i']: 
         return 0.01 
     else : 
         return None 


def save_prices_to_file(instrument, n= 100 ):
    '''
    Функция принимает инструмент, количество отсчётов цены n в таймфрейме М 5 , 
    и сохраняет в файл (только сформировавшиеся полностью бары, время соответствует времени закрытия (!) бара)
    '''
    w = pips_definer(instrument) 
    tochn = int (abs( log10 (w))+ 1 )  
    path_file = os.path.join(work_catalog, instrument+'.txt') 
    
    bars = mt5.copy_rates_from_pos(instrument, mt5.TIMEFRAME_M5, 0 , n+ 1 ) # в случае ошибки mt5.copy_rates_from_pos возвращает None 
    
    try: 
        f = open(path_file, 'w') 
         for i in range( 0 , n+ 1 ): 
            bar = bars[i] 
            dt_stamp = date_time.fromtimestamp(bar[ 0 ], dt.timezone.utc) + dt.timedelta(hours= 1 , minutes= 5 ) 
            open_ = str( round (bar[ 1 ], tochn)) 
            high_ = str( round (bar[ 2 ], tochn))
            low_ = str( round (bar[ 3 ], tochn))
            close_ = str( round (bar[ 4 ], tochn))
             if i != n: 
                f.write(dt_stamp.M5_view + ' ' + open_ + ' ' + high_ + ' ' + low_ + ' ' + close_ + '\n')
        f.close()    
        print(date_time.now().nice_view, ' - котировки {} успешно записаны в файл'.format(instrument))
    except: 
        print(date_time.now().nice_view, ' - котировки {} записать в файл не удалось'.format(instrument)) 

그리고 main 함수에 따옴표 저장 함수에 대한 호출을 추가합니다.

def main(N): 
    
    '''
    Главная функция, обеспечивающая в бесконечном цикле связь с терминалом, 
    сохранение котировок, и запуск функции, осуществляющей торговлю
    '''    
    
    dt_start = date_time.now() 
    dt_write = dt_stamp_from_M5_view(dt_start.M5_view) + dt.timedelta(minutes= 5 , seconds= 10 ) 
    print('\n' + dt_start.nice_view, ' - начал работу, бездействую до ' + dt_write.nice_view + '\n') 
    timedelta_sleep = dt_write - date_time.now() 
    time.sleep(timedelta_sleep.seconds) 
    
     while True:
        
        # установка соединения с MetaTrader5 
         if terminal_init(os.path.join('C:\\', 'Program Files', 'Alpari MT5', 'terminal64.exe'), work_account): 
            
            # запись цен в файлы: для всех инструментов, N отсчётов  
             if (dt. datetime .now() - dt_write) < dt.timedelta(seconds= 10 ): 
                print('\n' + date_time.now().nice_view + '  - начинаю запись котировок в файлы')
                 for instrument in instruments: 
                    save_prices_to_file(instrument, N) 
            
            # пауза 10 секунд: временная заглушка, имитирующая анализ цен, принятие и выполнение решений 
            print('\nосуществляю торговлю: анализирую котировки, открываю и/или закрываю сделки')
            time.sleep( 10 )
            
            # завершение соединения с MetaTrader5 
            terminal_done() 
        
            # определение параметров ожидания до следующего выполнения тела цикла 
            dt_start = date_time.now()  
            dt_write = dt_stamp_from_M5_view(dt_start.M5_view) + dt.timedelta(minutes= 5 , seconds= 10 ) 
            timedelta_sleep = dt_write - dt_start 
            print(date_time.now().nice_view + '  - засыпаю до {}\n\n\n\n\n'.format(dt_write.nice_view))  
            time.sleep(timedelta_sleep.seconds) 
        


작업 결과:


6개의 파일이 /fx/ 폴더에 나타납니다.


그것들은 다음과 같은 구조를 가지고 있습니다(예: EURUSD_i.txt): M5_view, open, high, low, close 형태의 날짜-시간 카운트다운, 시간 카운트다운은 막대가 닫히는 순간에 해당합니다.

202112071335 1.1269 1.12697 1.12659 1.1266
202112071340 1.1266 1.12669 1.12636 1.12659
202112071345 1.1266 1.12664 1.12627 1.12627
202112071350 1.12628 1.12633 1.12595 1.12595
202112071355 1.12598 1.126 1.12564 1.12586

...

202112110040 1.13173 1.13181 1.13164 1.13167
202112110045 1.13167 1.1317 1.13157 1.13163
202112110050 1.13163 1.13167 1.13155 1.13157


내 서버 시간이 내 컴퓨터의 현재 시간보다 1시간 짧고 그 안에서 생각하는 것이 편하다는 점(모스크바 시간)에 주목한다.

따라서 따옴표 저장 기능의 코드에서 1시간 5분의 시간 델타를 추가했습니다.

dt.timedelta(hours= 1 , minutes= 5 )

그 안에 1시간은 서버시간과 내 시간의 차이인데, 5분은 내가 바의 닫는 시간을 생각하면 편하고, 단말기가 여는 시간을 알려준다는 사실에서 비롯된다.

5분마다 가격이 포함된 파일이 새로 작성되고 끝에 줄이 추가되지 않고 전체 다시 작성됩니다. 최신 SSD의 경우 1000개 라인에 불과하며 5분에 1번이면 할 말이 없습니다.
 
Sergey Deev # :

저것들. 표시기의 데이터를 csv 파일이나 SQLite에 저장한 다음 파이썬으로 읽는 예를 들어 주시겠습니까? 재미있지 않겠습니까?

이것만큼 재미있습니다. 여기 파이썬이 있기 때문입니다. 이러한 데이터를 사용하여 스크립트는 모든 프로그래밍 언어로 작성할 수 있습니다.

 
Malik Arykov # :

이것만큼 재미있습니다. 여기 파이썬이 있기 때문입니다. 모든 프로그래밍 언어에서 동일한 작업을 수행할 수 있습니다.

물론 당신은 할 수. 그러나 Python의 진입 장벽은 C++보다 훨씬 낮습니다. 프로그래밍에 전혀 익숙하지 않은 사람들도 3개월 만에 Python을 사용하여 필요한 작업을 쉽게 시작할 수 있습니다. 쉬운 것이 필요하다면.

 
Malik Arykov # :

이것만큼 재미있습니다. 여기 파이썬이 있기 때문입니다. 모든 프로그래밍 언어에서 동일한 작업을 수행할 수 있습니다.

다른 언어에 대해 파이썬을 사용하는 것이 재미있습니까? 나는 주장하지 않습니다 .. 다른 언어가 MT와 통합되어 있고 인용문을 얻을 수 있다면 계속하십시오 ..

 

보고서에 따르면 TC가 원하는 것을 이해하지 못했습니다. 모순만 있습니다. MQL에 대해 알고 싶지 않은 사람들이 있지만 이 사람들은 주제별 리소스를 방문할 것이며 이 사람들도 MT5를 순서대로 설치해야 합니다. 마침내 파이썬에 뛰어들기 위해 ...... 어떻게 하면 어렵습니까?


TS가 이미 대중의 이익을 위해 Python으로 무언가를 만들고자 하는 열망이 있다면 IMHO, 모든 것을 Python으로 작성하고 나중에 통합 또는 교환 작업을 버리십시오.

교육 목적으로 Python 에서 따옴표를 가져오는 것도 문제가 되지 않습니다.

여기에서 찾았습니다. 몇 달 전에 알아냈습니다.

import finplot as fplt
import yfinance
df = yfinance.download('AAPL')
fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']])
fplt.show()



일반적으로 주제의 목표가 전혀 명확하지 않습니다.

 
Sergey Deev # :

다른 언어에 대해 파이썬을 사용하는 것이 재미있습니까? 나는 주장하지 않습니다 .. 다른 언어가 MT와 통합되어 있고 인용문을 얻을 수 있다면 계속하십시오 ..

MT5와 python의 통합이 완료되지 않았음을 의미합니다. 지표 값을 직접 가져올 수 없습니다.

 

Igor Makanu 가져오는 것도 문제가 되지 않습니다.

여기에서 찾았습니다. 몇 달 전에 알아냈습니다.

...


일반적으로 주제의 목표가 전혀 명확하지 않습니다.

통합 작업은 metatrader5 라이브러리에 의해 해결되며 나중에 해결하거나 폐기할 필요가 없습니다.

견적 가져오기는 교육 목적이 아니라 실제 거래를 위해 필요하므로 신화적 *금융이 아니라 거래가 수행되는 터미널에서 직접 가져옵니다.

주제의 목표는 5센트 정도로 간단합니다. 터미널과의 통신 초기화, 견적 요청, 서버에 트랜잭션 열기 또는 닫기 요청 등과 같은 코드 조각을 단순히 복사하여 모든 사람이 Python에서 알고리즘 거래를 시작할 수 있도록 하는 것입니다. 등. 더욱이 이를 위해 매우 편리한 언어로 논리에만 집중하십시오.

 
Malik Arykov # :

MT5와 python의 통합이 완료되지 않았음을 의미합니다. 지표 값을 직접 가져올 수 없습니다.

이 지표가 계산되는 가격이 있다면 지표 값이 필요한 이유는 무엇입니까? 간단한 예를 들어 SMA 계산과 같은 몇 가지 간단한 기능을 잠시 후에 설명하겠습니다. 아무도 귀찮게하지 않으므로 원하는 것을 작성하십시오.
사유: