Как решить проблему, связанную с тем, что глобальная переменная не определена в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как решить проблему, связанную с тем, что глобальная переменная не определена в Python?

Сообщение Anonymous »

Пишу скрипт для торговли акциями/крипто. Очень грубая стратегия — покупать, когда RSI (технический индикатор на бирже) достигает 50, и продавать, когда RSI падает ниже 50 в течение 3 дней подряд или ниже 40 в течение одного дня. Мой исходный сценарий выглядит следующим образом:

Код: Выделить всё

def simpleRSIstrategy(indicator, threshold1 = 50, threshold2 = 40, days = 3):

buySellTable = dict()

# simple RSI strategy

hold = False
count = 0

for i in range(len(indicator)):
# buying strategy
if indicator['RSI7'][i] > threshold1 and not hold:
date = indicator.index[i]
buySellTable[date] = 'Buy'
hold = True

# selling strategy
if indicator['RSI7'][i] < threshold1 and hold:
count += 1
if count == days or indicator['RSI7'][i] < threshold2:
date = indicator.index[i]
buySellTable[date] = 'Sell'
hold = False
count = 0
if indicator['RSI7'][i] > threshold1 and hold:
count = 0
return buySellTable
Этот скрипт должен применять вышеупомянутую простую стратегию RSI и возвращать «buySellTable», который представляет собой словарь с датами в качестве ключей и «Купить» и «Продать» в качестве ключей. предметы. В этом сценарии нет ничего плохого. Поскольку это сырая стратегия, ее необходимо оптимизировать. Я хочу разделить ее на две части — стратегию покупки и стратегию продажи, чтобы можно было провести оптимизацию соответственно. Затем я переписал его в следующие скрипты:

Код: Выделить всё

def simpleRSIstrategy_split(indicator, threshold1 = 50, threshold2 = 40, days = 3):

buySellTable = dict()
hold = False
count = 0
startIdx = 0

while True:

simpleBuyStrategy_split(indicator, threshold1)

simpleSellStrategy_split(indicator, threshold1, threshold2, days)

if startIdx == len(indicator)-1:
break

return buySellTable

Код: Выделить всё

def simpleBuyStrategy_split(indicator, threshold1):
global startIdx, hold, buySellTable

for i in range(startIdx, len(indicator)):
if indicator['RSI7'][i] > threshold1 and not hold:
date = indicator.index[i]
buySellTable[date] = 'Buy'
hold = True
startIdx = i+1
break

def simpleSellStrategy_split(indicator, threshold1, threshold2,  days):
global startIdx, count, hold, buySellTable

for i in range(startIdx, len(indicator)):
if indicator['RSI7'][i] < threshold1 and hold:
count += 1
if count == days or indicator['RSI7'][i] < threshold2:
date = indicator.index[i]
buySellTable[date] = 'Sell'
hold = False
count = 0
startIdx = i+1
break
if indicator['RSI7'][i] > threshold1 and hold:
count = 0
В скрипте simpleRSIstrategy_split я хочу рассматривать buySellTable, Hold, Count и startIdx как глобальные переменные, которые можно использовать и редактировать скриптами simpleBuyStrategy_split и simpleSellStrategy_split. Но при запуске сценария я получил сообщение об ошибке: имя startIdx не определено. Я проверял вывод консоли и обнаружил, что при выполнении строки

Код: Выделить всё

for i in range(startIdx, len(indicator)):
в скрипте simpleBuyStrategy_split жалуется, что startIdx не определен. Но я уже определил ее как глобальную переменную. Я не знаю, почему это происходит и как это решить?

Подробнее здесь: https://stackoverflow.com/questions/725 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»