سنبني روبوت تقاطع متوسطات متحركة على أرامكو السعودية (2222): نتتبّع متوسّطاً قصيراً (5 فترات) وطويلاً (20 فترة) للسعر، نشتري حين يتقاطع القصير صعوداً فوق الطويل («تقاطع ذهبي»)، ونبيع حين يتقاطع هبوطاً تحته («تقاطع الموت»). يعمل على محفظتك الورقية في تاسي لاب، فلا يُرسَل أي أمر حقيقي.
التهيئة
Terminal
pip install tasilab
export TASILAB_API_KEY="your-api-key"
ليس لديك مفتاح بعد؟ سجّل مجاناً — تحصل على واحد ومعه 100,000 ريال رأس مال ورقي.
الروبوت
sma_bot.py
import os
import time
from collections import deque
from tasilab import Tasilab
SYMBOL, SHORT, LONG, QTY, POLL = "2222", 5, 20, 100, 30
tasi = Tasilab(api_key=os.environ["TASILAB_API_KEY"])
prices = deque(maxlen=LONG)
# Are we already holding this symbol?
in_position = any(p["symbol"] == SYMBOL and p["quantity"] > 0
for p in tasi.positions())
while True:
price = float(tasi.get_quote(SYMBOL)["price"])
prices.append(price)
if len(prices) < LONG: # warm up first
print(f"collecting… {len(prices)}/{LONG}")
time.sleep(POLL)
continue
short_ma = sum(list(prices)[-SHORT:]) / SHORT
long_ma = sum(prices) / LONG
if short_ma > long_ma and not in_position:
order = tasi.buy(SYMBOL, quantity=QTY) # paper market order
in_position = True
print("BUY ", price, "->", order["status"])
elif short_ma < long_ma and in_position:
order = tasi.sell(SYMBOL, quantity=QTY)
in_position = False
print("SELL", price, "->", order["status"])
time.sleep(POLL)
شغّله بـpython sma_bot.py. يستعلم عن السعر كل 30 ثانية، ويحتفظ بآخر 20 سعراً، ولا يتحرّك إلا عند التقاطع. كل تنفيذ يطبّق العمولة الحقيقية 0.155% زائد 15% ضريبة، ويستقرّ في محفظتك الورقية.
اختبره تاريخياً قبل تشغيله. الروبوت الذي يتداول لا يساوي إلا قدر الفكرة خلفه. قبل أن تُطلق هذه الحلقة، اختبر القاعدة نفسها على التاريخ عبر دليل الاختبار التاريخي — غالباً ستجد أن التقاطع الساذج يخسر أمام الشراء والاحتفاظ، وهذا بالضبط ما تريد أن تتعلّمه ورقياً لا بأموال حقيقية.
إلى أين تأخذه بعد ذلك
- راعِ الرزنامة. الروبوت يدور باستمرار؛ غلّفه ليعمل فقط ضمن ساعات تداول (الأحد–الخميس، 10:00–15:00) — تحقّق عبر
tasi.market_status(). - حجّم المراكز من نقدك المتاح (
tasi.portfolio()["cash_balance"]) بدل كمية ثابتة. - سجّل كل تشغيل كتجربة في تاسي لاب لتقارن إصدارات الروبوت — راجع دليل الاختبار التاريخي.
- بدّل الإشارة. RSI أو MACD أو بولنجر — شكل الحلقة نفسه يصلح لأي قاعدة تحسبها من تدفّق السعر.
