Python ile Ticaret - sayfa 3

 
Mikhael1983 # :

Kütüphanede açıklanan fonksiyonları kullanarak, terminal ile bağlantı başlatma ve terminal ile bağlantıyı sonlandırma fonksiyonlarını uygularız. Bunu her 5 dakikada bir sonsuz döngüde yapmayı planlıyoruz.

...

Programın çalışması:

Bütün bunlar mql5 araçları kullanılarak başarıyla uygulanmaktadır.

 
Vitaly Muzichenko # :

Bütün bunlar mql5 araçları kullanılarak başarıyla uygulanmaktadır.

Doğal olarak. Bununla birlikte, mql5'e aşina olmayan ve yalnızca belirli bir şirketin belirli bir terminaliyle son derece dar bir çalışma alanında geçerli olan eski bir aracı incelemek için hiçbir neden görmeyen geniş bir insan katmanı var.
 

Sorular için minnettar olurum, nasıl ve ne gibi açıklamalar yapabilirim.

Alıntıları dosyalara kaydedecek bir fonksiyon yazalım. Prensip olarak, alıntıları dosyalara kaydetmeye hiç gerek yoktur. Onları akılda tutmak için yeterli. Benim için, bu tarihsel olarak, terminalin bir Windows sanal makinesinde olması ve Python programının tırnak kaydetmesi ve tüm mantığın ana bilgisayar sistemi Debian GNU / Linux'ta olması ve okuyan kendi Python programı olması gerçeğinden geldi. bu dosyalar ve sanal Windows'taki Python programının okuduğu ve yürüttüğü diğer ticaret talimatı dosyalarına yazar.

Ancak, dosyalara alıntı yazmak başlı başına yararlıdır. Açıkça. Olanları görmenizi, hissetmenizi, başka yollarla (aynı Matkad) vb. okumanızı sağlar. Öyleyse bunu yapalım.

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)) 

Ve ana işleve tırnak kaydetme işlevine bir çağrı ekleyin:

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) 
        


İşin sonucu:


/fx/ klasöründe altı dosya belirdi:


aşağıdaki yapıya sahiptirler (örneğin, EURUSD_i.txt): M5_view, open, high, low, close şeklinde tarih-saat geri sayımı, zaman geri sayımı ise çubuğun kapandığı ana karşılık gelir.

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


Sunucu saatimin bilgisayarımın şu anki saatinden 1 saat daha az olduğuna ve bunun içinde düşünmenin benim için uygun olduğuna (Moskova saati) dikkatinizi çekiyorum.

Bu nedenle, tırnak kaydetme fonksiyonunun koduna 1 saat 5 dakikalık bir zaman deltası ekledim:

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

içinde 1 saat server saati ile benimki arasındaki saat farkı ve 5 dakika barın kapanma saatini düşünmenin benim için uygun olmasından kaynaklanıyor ve terminal açılış saatini veriyor.

Her 5 dakikada bir, fiyatları olan dosyalar yeniden yazılır, yeniden, sonuna satır eklenmez, baştan sona yeniden yazılır. Modern SSD'ler ve yalnızca 1000 satır ve 5 dakikada yalnızca 1 kez - konuşulacak bir şey yok.
 
Sergey Deev # :

onlar. herhangi bir göstergenin verilerini bir csv dosyasına veya SQLite'a kaydetme ve ardından bunları python'a okuma örneği verir misiniz? Bu komik olmaz mıydı?

Bu da bir o kadar komik. Çünkü piton burada. Bu tür verilerle komut dosyası herhangi bir programlama dilinde yazılabilir.

 
Malik Arykov # :

Bu da bir o kadar komik. Çünkü piton burada. Aynısı herhangi bir programlama dilinde yapılabilir

Tabi ki yapabilirsin. Ancak Python'a giriş engeli C++'dan çok daha düşüktür. Programlamaya tamamen yabancı olan kişiler 3 ayda Python kullanarak ihtiyaç duyduklarını kolayca yapmaya başlayabilirler. Kolay bir şeye ihtiyacınız varsa.

 
Malik Arykov # :

Bu da bir o kadar komik. Çünkü burada piton var. Aynısı herhangi bir programlama dilinde yapılabilir

Python'u başka bir dile karşı kullanmak komik mi? Tartışmıyorum .. başka bir dilin MT ile entegrasyonu varsa ve teklif almanıza izin veriyorsa - devam edin ..

 

TC'nin ne istediğini anlamadım, raporlara göre, sadece çelişkiler var - MQL hakkında bilmek istemeyen insanlar var, ancak bu insanlar tematik kaynağı ziyaret edecek, bu kişilerin de sırayla MT5 yüklemesi gerekiyor sonunda Python'a dalmak ...... o zaman nasıl zor


TS zaten Python'da halkın yararına bir şey yaratma arzusuna sahipse, IMHO, her şeyi Python'a yazın ve daha sonra entegrasyon veya değişim görevini atın,

Python'da eğitim amaçlı alıntıları içe aktarmak da sorun değil

İşte buldum, birkaç ay önce anladım:

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



genel olarak, konunun amaçları hiç net değil

 
Sergey Deev # :

Python'u başka bir dile karşı kullanmak komik mi? Tartışmıyorum .. başka bir dilin MT ile entegrasyonu varsa ve teklif almanıza izin veriyorsa - devam edin ..

Python'un MT5 ile entegrasyonu tamamlanmadı demek istiyorum. Gösterge değerlerini DOĞRUDAN alamazsınız

 

Igor Makanu içe aktarmak da sorun değil

İşte buldum, birkaç ay önce anladım:

...


genel olarak, konunun amaçları hiç net değil

Entegrasyon görevi metatrader5 kitaplığı tarafından çözülür, daha sonra çözülmesi veya atılması gerekmez.

Tekliflerin içe aktarılması eğitim amacıyla değil, gerçek ticaret için gereklidir, bu nedenle efsanevi *finanstan değil, doğrudan ticaretin yapıldığı terminalden.

Konunun amaçları beş sent kadar basittir: herkesin terminal ile iletişimi başlatmak, fiyat teklifi istemek, sunucudan bir işlemi açmasını veya kapatmasını istemek gibi kod parçalarını basitçe kopyalayarak Python'da algoritmik ticarete başlamasına izin vermek. vb. Üstelik bunun için son derece uygun bir dilde sadece mantığa odaklanın.

 
Malik Arykov # :

Python'un MT5 ile entegrasyonu tamamlanmadı demek istiyorum. Gösterge değerlerini DOĞRUDAN alamazsınız

Bu göstergelerin hesaplandığı fiyatlarınız varsa neden gösterge değerlerine ihtiyacınız var? Biraz sonra basit bir örnek olarak SMA hesaplamaları gibi birkaç basit fonksiyon vereceğim. İstediğini yaz, kimse uğraşmasın.
Neden: