Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 2103

 
Vladimir Perervenko :

Öz sermaye ve komisyon hesaplayan bir fonksiyonunuz var mı?

 
mytarmailS :

Öz sermaye ve komisyon hesaplayan bir fonksiyonunuz var mı?

Dil, değişim, forex? Neyi anlamadım.

 
Vladimir Perervenko :

Dil, değişim, forex? Neyi anlamadım.

R-ka, forex

Peki, işlemler + komisyon \ spread (maliyetler) için bilanço tablosunu dikkate alacak bir fonksiyon

Ben yazdım doğru mu bilmiyorum

calc.balance <- function(sig,x, comision=0){
sig <- ifelse(sig>0, 1, -1)

trades.count <- length(rle(c(sig))$values) # сколько было сделок
comis <- comision*trades.count


sig <- na.omit(  dplyr::lag(sig)  )
dC <- c(NA, diff(x))
bal <- cumsum(sig * tail(dC, length(sig) )   )

bal <- bal-comis
return(bal)}

 

Teklifleri yüklemek için "MetaTrader5" (Python) paketini kullanan R'de bir komut dosyası örneği. R'de "reticulate" kitaplığı kurulu olmalıdır. Aslında bu kütüphane Python ile etkileşimi sağlar. Burayı ve burayı dikkatlice okuyun. Reticulate kitaplığını ilk çalıştırdığınızda, miniconda'yı kurmanız istenecektir. vazgeçmemeni tavsiye ederim. Bu, python(3.6.xx) kurulu ve ilk paket setiyle r-reticulate conda ortamını yaratacaktır. Zaten Python (veya birkaç sürüm) kuruluysa, betiğin başında istediğiniz ortamı etkinleştirmeniz gerekir. "MetaTrader5" paketinin tüm komutları burada .

başlatma komut dosyası

#---необходимые константы------------------
sym <- "Si- 12.20 "
# TERMINAL_PATH <- "C:/Program Files/.../terminal64.exe"
# server <- "Open-Broker"
# login <- xxxxxx
bar <- 6000 L
tf <- 3 L
ch <- 15 L
# TP <- 5
# SL <-
# lot <- 1.0
# magik <-
#----------------------------------
require(reticulate)
#----Connect terminal(Python)-------------------
mt5 <- import('MetaTrader5')

if (!mt5$initialize())
    print("initialize() failed, error code =", mt5$last_error())


termInfo <- mt5$terminal_info()
termInfo$data_path -> dataPath
termInfo$name -> broker

#termInfo$trade_allowed
#termInfo$connected

AccInfo <- mt5$account_info()
AccInfo$login -> login
AccInfo$server -> server
AccInfo$balance -> start_balance
AccInfo$equity -> start_equity
AccInfo$profit -> profit

selected = mt5$symbol_select(sym,TRUE)
if (!selected){
    print("Failed to select ", sym, ", error code =", mt5$last_error())
    mt5$shutdown()
    quit()
}

SymInfo = mt5$symbol_info(sym)
SymInfo$digits -> Dig


Alıntıları indirmek için bir fonksiyon yazın

#---Function-------------------------------
GetCotirPy <- function(sym){
    selected = mt5$symbol_select(sym,TRUE)
    if (selected)
        py_run_string("
import pandas as pd
import MetaTrader5 as mt5
rates = pd.DataFrame(mt5.copy_rates_from_pos(r.sym, r.tf, 1, r.bar))"
        )
    return(py$rates)
}

Alınan verilerin yapısına bakalım.

rates <- GetCotirPy(sym = sym)
str(rates)
'data.frame':   6000 obs. of  8 variables:
 $ time       : num  1.6e+09 1.6e+09 1.6e+09 1.6e+09 1.6e+09 ...
 $ open       : num  77498 77504 77511 77528 77553 ...
 $ high       : num  77520 77561 77555 77560 77578 ...
 $ low        : num  77472 77504 77500 77521 77537 ...
 $ close      : num  77502 77511 77528 77553 77564 ...
 $ tick_volume: num  2748 3934 1984 1459 2452 ...
 $ spread     : int  1 1 1 1 1 1 1 1 1 1 ...
 $ real_volume: num  11540 21547 8953 6521 14932 ...
 - attr(*, "pandas.index")=RangeIndex(start=0, stop=6000, step=1)

Daha fazla hesaplama gereklidir.

reticulate 1.14
  • blog.rstudio.com
We’re excited to announce that 1.14 is now available on CRAN! You can install it with: With this release, we are introducing a major new feature: can now automatically configure a Python environment for the user, in coordination with any loaded R packages that depend on . This means that: Ultimately, the goal is for R packages using to be able...
 
mytarmailS :

R-ka, forex

Peki, işlemler + komisyon \ spread (maliyetler) için bilanço tablosunu dikkate alacak bir fonksiyon

Ben yazdım doğru mu bilmiyorum


burayı anlamıyorum

trades.count <- length( rle (c(sig))$values) # сколько было сделок
 
mytarmailS :

R-ka, forex

Peki, işlemler + komisyon \ spread (maliyetler) için bilanço tablosunu dikkate alacak bir fonksiyon

Ben yazdım doğru mu bilmiyorum


Buradaki işlem sayısının dikkate alınmasına gerek olmadığını düşünüyorum. Ve sadece her işlemden komisyonlu spread'i çıkarın. Bunun gibi bir şey:

calc.balance <- function(sig,x, comision=0){
sig <- ifelse(sig>0, 1, -1)


sig <- na.omit(  dplyr::lag(sig)  )
dC <- c(NA, diff(x))
bal <- cumsum(sig * tail(dC, length(sig) )   )

bal <- bal-comision
return(bal)}
 
elibrarius :

Buradaki işlem sayısının dikkate alınmasına gerek olmadığını düşünüyorum. Ve sadece her işlemden komisyonlu spread'i çıkarın. Bunun gibi bir şey:

Bu taraftan değil. örneğin

sig<- rep(c( 1 , 1 , 1 , 1 , 1 ,- 1 ,- 1 ,- 1 ,- 1 ), 100 )
length(sig)
[ 1 ] 900

Komisyon, her sinyal için değil, yalnızca sinyal zıt yönde değiştiğinde ücretlendirilecektir. işlevi kullanıyorum

cnt<-function(x){
    n <- 1 :(length(x)- 1 )
    cnt <- 0
     for (i in n) { if (x[i]!=x[i+ 1 ]) {cnt<-cnt+ 1 }}
     return (cnt)
}

Yukarıdaki sinyal vektörü için

cnt(sig)
[ 1 ] 199
length(rle(c(sig))$values)
[ 1 ] 200

Anlaşılmaz bir fark.

Ve denge fonksiyonunu hesaplamak için

test_bal <- function(sig, CO){
    import::here(poorman, Lag = lag)
    import::here(.from = fTrading, maxDrawDown)
    sig %>%  Lag() %>% na.omit()->sig
    CO %>% tail(length(sig))-> CO
    bal <- cumsum(CO * sig)
    K <- (last(bal)/length(bal) * 10 ^Dig)%>% round ()
    Kmax <- max(bal)/which.max(bal) * 10 ^Dig %>% round ()
    dd <- maxDrawDown(bal)[[ 1 ]] %>% round ()
    op <-cnt(sig)
    tst<-list(bal = bal, k = K, k.max = Kmax, op = op, dd = dd)
     return (tst)
}

İyi şanlar

 
Vladimir Perervenko :

burayı anlamıyorum

c "rle" sinyal değişikliklerinin sayısını sayabilirsiniz, bunlar sayılır. işlemler

 sig <- c( 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 )
> sig
 [ 1 ] 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1
> rle(sig)
Run Length Encoding
  lengths: int [ 1 : 5 ] 5 4 3 4 3
  values : num [ 1 : 5 ] 1 0 1 0 1

"Değerler" ile sinyalin 5 kez değiştiğini görebilirsiniz, bu da 5 anlaşma olduğu anlamına gelir.

Vladimir Perervenko :

Anlaşılmaz bir fark.

Benim uygulamamın komisyonu da hesaba kattığını düşünüyorum, deyim yerindeyse, "açılış bizde olmayan o ilk işlem, sadece kapanış var"

 sig <- c( 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 )

 [ 1 ] 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1

bu anlaşma gibi, seçeneğim komisyon alıyor

ve sürümünüz bundan almaya başlar, sürümünüz daha doğrudur, ancak düzeltmesi kolaydır, sadece "1" çıkarın

 sig <- c( 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 )
> sig
 [ 1 ] 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1
 
Vladimir Perervenko :

Kullanarak R'de örnek bir komut dosyası ...

teşekkürler, inceleyeceğim

 
mytarmailS :

c "rle" sinyal değişikliklerinin sayısını sayabilirsiniz, bunlar sayılır. fırsatlar

"Değerler" ile sinyalin 5 kez değiştiğini görebilirsiniz, bu da 5 anlaşma olduğu anlamına gelir.

Benim uygulamamda komisyonun da dikkate alındığını ve “açılış bizim elimizde olmayan ilk işlem ise, sadece kapanış olduğunu” düşünüyorum.

bu anlaşma gibi, seçeneğim komisyon alıyor

ve sürümünüz bundan almaya başlar, sürümünüz daha doğrudur, ancak düzeltmesi kolaydır, sadece yapın, sadece "1" çıkarın

Evet, sürümünüz doğru.