Translate

Views

Saturday, August 30, 2025

HTF Candle D/H4/H1/M15


 

//@version=6

indicator("HTF Candles — D / H4 / H1 / M15 (fixed)", overlay=true)

// --- Inputs
tfD  = input.timeframe("D",   "Daily TF")
tfH4 = input.timeframe("240", "H4 TF")
tfH1 = input.timeframe("60",  "H1 TF")
tfM15= input.timeframe("15",  "M15 TF")

shiftD  = input.int(45, "Shift D (bars to the right)")
shiftH4 = input.int(30, "Shift H4 (bars to the right)")
shiftH1 = input.int(15, "Shift H1 (bars to the right)")
shiftM15= input.int(0,  "Shift M15 (bars to the right)")

boxWidth = input.int(6, "Box width (bars)", minval=1)

// --- Fetch HTF OHLC via request.security
oD  = request.security(syminfo.tickerid, tfD,  open)
hD  = request.security(syminfo.tickerid, tfD,  high)
lD  = request.security(syminfo.tickerid, tfD,  low)
cD  = request.security(syminfo.tickerid, tfD,  close)

oH4 = request.security(syminfo.tickerid, tfH4, open)
hH4 = request.security(syminfo.tickerid, tfH4, high)
lH4 = request.security(syminfo.tickerid, tfH4, low)
cH4 = request.security(syminfo.tickerid, tfH4, close)

oH1 = request.security(syminfo.tickerid, tfH1, open)
hH1 = request.security(syminfo.tickerid, tfH1, high)
lH1 = request.security(syminfo.tickerid, tfH1, low)
cH1 = request.security(syminfo.tickerid, tfH1, close)

oM15 = request.security(syminfo.tickerid, tfM15, open)
hM15 = request.security(syminfo.tickerid, tfM15, high)
lM15 = request.security(syminfo.tickerid, tfM15, low)
cM15 = request.security(syminfo.tickerid, tfM15, close)

// --- Draw helper (vẽ 1 cây nến HTF ở vị trí offset)
drawHTF(_name, _o, _h, _l, _c, _shift) =>
    bcol = _c >= _o ? color.green : color.red
    left = bar_index + _shift
    right = bar_index + _shift + boxWidth
    top = math.max(_o, _c)
    bot = math.min(_o, _c)
    // thân
    _ = box.new(left, top, right, bot, border_color = bcol, bgcolor = color.new(bcol, 0), xloc = xloc.bar_index)
    // râu
    wickX = bar_index + _shift + math.round(boxWidth / 2)
    _ = line.new(wickX, _h, wickX, _l, color = bcol, xloc = xloc.bar_index)
    // label (giá trị)
    _ = label.new(bar_index + _shift + boxWidth + 1, _h, text = _name + " H: " + str.tostring(_h), xloc = xloc.bar_index, style = label.style_label_left, color = color.new(bcol,80), textcolor = bcol)
    _ = label.new(bar_index + _shift + boxWidth + 1, _o, text = "O: " + str.tostring(_o), xloc = xloc.bar_index, style = label.style_label_left, color = color.new(bcol,80), textcolor = bcol)
    _ = label.new(bar_index + _shift + boxWidth + 1, _l, text = "L: " + str.tostring(_l), xloc = xloc.bar_index, style = label.style_label_left, color = color.new(bcol,80), textcolor = bcol)

// --- Xoá các đồ họa cũ và vẽ lại chỉ ở barstate.islast để tránh tạo quá nhiều object
if barstate.islast
    for ln in line.all
        ln.delete()
    for lb in label.all
        lb.delete()
    for bx in box.all
        bx.delete()

    // Vẽ 4 khung
    drawHTF("D",  oD,  hD,  lD,  cD,  shiftD)
    drawHTF("H4", oH4, hH4, lH4, cH4, shiftH4)
    drawHTF("H1", oH1, hH1, lH1, cH1, shiftH1)
    drawHTF("M15",oM15,hM15,lM15,cM15,shiftM15)

// --- (Tuỳ chọn) hiển thị bảng nhỏ thông tin
var tbl = table.new(position.middle_right, 1, 4, border_width=1, bgcolor=color.new(#eeeeee, 30))
if barstate.islast
    table.cell(tbl, 0, 0, "TF: " + tfD + " / " + tfH4 + " / " + tfH1 + " / " + tfM15)
    table.cell(tbl, 0, 1, "D O: " + str.tostring(oD) + "  C: " + str.tostring(cD))
    table.cell(tbl, 0, 2, "H4 O: " + str.tostring(oH4) + "  C: " + str.tostring(cH4))
    table.cell(tbl, 0, 3, "H1 O: " + str.tostring(oH1) + "  C: " + str.tostring(cH1))

Sunday, August 10, 2025

Báo cáo khoa học 2025: Cách đánh bại nhà cái bằng toán học và xác suất thống kê !

     Chào các bạn, nhiều người nói rằng chơi cá độ không bao giờ thắng, tôi băng khoăng liệu câu này có đúng không hay vẫn có vài người có thể thắng thấm chí là đổi đời khi chơi bộ môn cờ bạc ?

Sau vài ngày về quê, tách biệt với cuộc sống khắc nghiệt thời đại công nghệ, tôi nhớ lại câu nói đó và bắt đầu đi tìm ra sự thật.

Với kinh nghiệm 6 năm học it bách khoa, 7 năm học trader, tôi bắt đầu tổng hợp lại các kiến thức đã học của mình để chứng minh câu nói trên là sai, thậm chí có thể kiếm tiền dễ hơn thị trường chứng khoáng, forex, ... Bởi vì trong thị trường trading chúng ta còn phải giải quyết vấn đề là tâm lý giao dịch - thứ khiến bạn chốt non và gồng lỗ. Còn trong cá độ thì không vì mỗi kèo (lệnh) đều không thể hủy khi trận đấu bắt đầu, điều này giúp đảm bảo tỉ lệ Risk and Reward mà tôi sẽ nói sau - đây là chìa khóa để chiến thắng các loại thị trường.

Tôi cũng xin chân thành cảm ơn thầy Tú đã cung cấp kiến thức về toán học và xác suất thống kê để tôi có thể viết được bài báo này.


Không dài dòng nữa tôi sẽ vào vấn đề chính.

Trước hết để khai thác được toán học và xác xuất thống kê thì chắc chắn chúng ta cần phải cần có dữ liệu số học, tôi chọn tổng số bàn thắng của 2 đội ở 3 kì world cup gần nhất có vẻ là đã đủ dùng.

Sau đây là vài hình ảnh data của các kì world cup 2014, 2018, 2022:

Còn tiếp ...





Nhận xét: Chúng ta có thể dễ dàng nhận ra là dữ liệu có dạng phân phối đuôi, và mỗi trận số bàn thắng thường nghiêng về 1 đến 3 bàn.

Dựa vào nhận xét trên ta có thể thấy phương án tối ưu là đặt 3 kèo tổng số bàn thắng là 1, 2, 3 hay là 1 kèo số bàn thắng từ 1-3.

Liệu cách trên có giúp ta chiến thắng nhà cái không, chúng ta sẽ cần một vài công thức toán học là kỳ vọng trong xác suất thống kê hay Risk và Reward trong trading để chứng minh điều này. 

Một số khái niệm cần biết:

1. Luật số lớn: Khi số lượng giao dịch tăng, kết quả thực tế sẽ tiến gần kỳ vọng toán học.

2. Nếu kỳ vọng dương, vốn sẽ tăng đều qua thời gian (mặc dù ngắn hạn có chuỗi thua).

3. Risk (rủi ro): số tiền bạn có thể mất nếu lệnh đi ngược.

4. Reward (lợi nhuận): số tiền bạn có thể kiếm nếu lệnh đi đúng.

Tóm lại, về lâu dài kỳ vọng toán học sẽ dương và ta sẽ có lãi nếu ta áp dụng công thức sau :
     Tỷ lệ R:R bắt buộc = (1/ tỷ lệ thắng) – 1

Một số hình ảnh về tỷ lệ thắng đã được tôi tính ra nếu theo kèo 1,2,3 bàn mỗi trận trong vào các kì world cup:



Nhận xét: Chúng ta có thể thấy được tỉ lệ thắng dao động khoảng 60 -> 80%. 
Vậy giả sử tỉ lệ thắng là 64% thì chúng ta cần chọn kèo có tỉ lệ cược thấp nhất là bao nhiêu để có lời ?



Câu trả lời là với tỉ lệ RR là 0.5625 : 1

Kết luận: Giả sử trong kỳ world cup 2026 sắp tới, nếu bạn theo kèo 1->3 bàn với tỉ lệ win là 64% và kèo yêu cầu chỉ cần bỏ ra 15k và nhận lại được khoảng 9k (=15*0.5625) thì về lâu dài bạn luôn là người chiến thắng trong cuộc chơi với nhà cái.

Ngoài ra, còn 1 chiến lược khác có thể có lợi nhuận lâu dài mà không cần phải tuân thủ theo RR đó chính là đặt cược theo kèo tổng bản thắng là chẵn hay lẽ tức là kèo với 50% win rate, để thắng được thì ta cần phải đặt vốn là gấp đôi khoản lỗ trong những lệnh tiếp theo. Tôi sẽ để dành phần này cho một bài viết khác.

Lưu ý: Bài viết này chỉ nhằm vào mục đích khoa học, không khuyến khích mọi người tham gia chơi cá độ. Chơi cá độ là vi phạm pháp luật và có thể phạt tù lên đến 7 năm.















Wednesday, March 26, 2025

How to hack crosshair csgo, no VAC-BAN 1000% ?

 

How to hack crosshair csgo, no VAC-BAN 1000% ?


Method 1:


When we start game we need:

Step1: Press ~

Step 2: Enter: 

unbind "CTRL"; bind "CTRL" "+recoil_hold"; alias "+recoil_hold" "+duck; cl_crosshair_recoil 1; alias check_recoil"; alias "-recoil_hold" "-duck; cl_crosshair_recoil 0"; alias "check_recoil" "cl_crosshair_recoil 1"



Method 2: (Not recommend, maybe not accepted match)




After add code to folder, we press ~ and write: exec namefilecode -> enter -> complete

I use space to sitdown so you should setting ctrl

unbind "SPACE"
bind "SPACE" "+recoil_hold"

alias "+recoil_hold" "+duck; cl_crosshair_recoil 1; alias check_recoil"
alias "-recoil_hold" "-duck; cl_crosshair_recoil 0"

// Optional: Thêm dòng này nếu game bị delay khi thả phím
alias "check_recoil" "cl_crosshair_recoil 1"

#Con day la code neu ban muon bat tat giat tam bang phim =
# unbind =
# bind = "toggle_recoil"

# alias recoil_on "cl_crosshair_recoil 1; echo Follow Recoil: ON; bind = recoil_off"
# alias recoil_off "cl_crosshair_recoil 0; echo Follow Recoil: OFF; bind = recoil_on"
# alias toggle_recoil "recoil_on"

# recoil_on

Shortest Solution UVA 11629 - Ballot evaluation

 

  Problem  VerdictLangTimeBestRankSubmit Time
 | discuss11629 - Ballot evaluation AcceptedPython0.2800.00014092 hours ago


def f(total, com, rs):
    if com == ' <= ':
        return total <= rs
    elif com == ' >= ':
        return total >= rs
    elif com == ' = ':
        return total == rs
    elif com == ' < ':
        return total < rs
    else:
        return total > rs

p, q = map(int, input().split())
d = {}
for _ in range(p):
    x, y = input().split()
    d[x] = int(float(y)*10)
   
cnt = 1
b = [' < ', ' > ', ' <= ', ' >= ', ' = ']
for _ in range(q):
    a = list(input().split(' + '))
    com = None
    rs = 0
    for c in b:
        if (c in a[-1]):
            rs = int(a[-1].split(c)[1])*10
            a[-1] = a[-1].split(c)[0]
            com = c
    total = 0  
    for x in a:
        total += d[x]
    if f(total, com, rs):
        print(f"Guess #{cnt} was correct.")
    else:
        print(f"Guess #{cnt} was incorrect.")
    cnt += 1

Saturday, February 15, 2025

Redux React (Cách nâng cao để truyền props trong react)

 Đừng lo lắng, mình sẽ giúp bạn từng bước để hiểu và sử dụng Redux Toolkit trong React, ngay cả khi bạn chưa có kinh nghiệm trước đó!

https://chatgpt.com/share/67b0bbf3-9b74-8007-a939-0db2039c78f3

Bước 1: Cài đặt Redux Toolkit và React-Redux

Trước tiên, bạn cần cài đặt Redux Toolkit và React-Redux trong dự án React của bạn.

Mở terminal và chạy lệnh sau:

bash
pnpm add @reduxjs/toolkit react-redux

Bước 2: Tạo Store với Redux Toolkit

Trong thư mục src, tạo một thư mục mới tên là store. Trong thư mục đó, tạo một file store.js.

js
// src/store/store.js import { configureStore } from '@reduxjs/toolkit'; // Tạo một reducer cơ bản (có thể sau này bạn sẽ thêm nhiều reducers khác) const initialState = { count: 0 }; const counterReducer = (state = initialState, action) => { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: return state; } }; // Cấu hình store với Redux Toolkit const store = configureStore({ reducer: { counter: counterReducer, }, }); export default store;

Bước 3: Cung cấp Store cho React

Mở file src/index.js và dùng Provider từ react-redux để cung cấp store cho toàn bộ ứng dụng React.

js
// src/index.js import React from 'react'; import ReactDOM from 'react-dom/client'; import { Provider } from 'react-redux'; import store from './store/store'; import App from './App'; ReactDOM.createRoot(document.getElementById('root')).render( <Provider store={store}> <App /> </Provider> );

Bước 4: Sử dụng Redux trong Component

Bây giờ bạn có thể sử dụng Redux trong các component của mình. Mình sẽ hướng dẫn bạn làm một component đơn giản để tăng và giảm giá trị count.

js
// src/components/Counter.js import React from 'react'; import { useDispatch, useSelector } from 'react-redux'; const Counter = () => { // Dùng useSelector để lấy state từ Redux store const count = useSelector((state) => state.counter.count); // Dùng useDispatch để tạo hành động const dispatch = useDispatch(); return ( <div> <h1>Counter: {count}</h1> <button onClick={() => dispatch({ type: 'increment' })}>Tăng</button> <button onClick={() => dispatch({ type: 'decrement' })}>Giảm</button> </div> ); }; export default Counter;

Bước 5: Kết nối Component vào Ứng Dụng

Cuối cùng, bạn chỉ cần sử dụng component Counter trong file App.js:

js
// src/App.js import React from 'react'; import Counter from './components/Counter'; const App = () => { return ( <div> <Counter /> </div> ); }; export default App;

Chúc mừng bạn!

Giờ thì bạn có thể tăng và giảm giá trị count từ Redux store trong ứng dụng React của mình.

Bạn chỉ cần nắm vững các bước cơ bản trên, sau đó sẽ dễ dàng mở rộng thêm các tính năng phức tạp hơn. Nếu cần thêm thông tin hoặc có thắc mắc, cứ hỏi nhé!

Friday, February 14, 2025

Context React (Cách đơn giản nhất để truyền props trong React)

 Cách đơn giản nhất để truyền props trong React mà không cần truyền qua nhiều cấp là sử dụng Context API. Dưới đây là cách triển khai cực kỳ đơn giản:


🔹 1. Tạo Context

Tạo một file riêng, ví dụ: MyContext.js

jsx
import { createContext, useState } from "react"; export const MyContext = createContext(); export const MyProvider = ({ children }) => { const [message, setMessage] = useState("Hello from Context!"); return ( <MyContext.Provider value={{ message, setMessage }}> {children} </MyContext.Provider> ); };

🔹 2. Bọc App bằng Provider

Mở file app/layout.tsx (nếu dùng Next.js 14 App Router) hoặc index.js (React thường) và bọc toàn bộ ứng dụng bằng MyProvider:

jsx
import { MyProvider } from "./MyContext"; export default function RootLayout({ children }) { return ( <MyProvider> <html lang="en"> <body>{children}</body> </html> </MyProvider> ); }

🔹 3. Sử dụng Context ở Component con

Bất cứ component nào trong cây component đều có thể truy cập message:

jsx
import { useContext } from "react"; import { MyContext } from "./MyContext"; const ChildComponent = () => { const { message, setMessage } = useContext(MyContext); return ( <div> <h1>{message}</h1> <button onClick={() => setMessage("Context đã thay đổi!")}> Thay đổi Context </button> </div> ); }; export default ChildComponent;

Tóm lại:

  1. Tạo Context (MyContext.js)
  2. Bọc ứng dụng bằng Provider (layout.tsx hoặc index.js)
  3. Dùng useContext() để lấy dữ liệu ở bất kỳ component nào

Thế là xong! Không cần truyền props lằng nhằng qua từng component. 🚀