سؤال
هنا هو رمز:
require("quantmod")
getSymbols("SPY")
ticker <- SPY[,4]
win <- 0
for(i in 11:NROW(ticker))
j <- i-10
if(ticker[i] > ticker[j])
win <- win + 1
أود التحقق مما إذا كان إغلاق اليوم أكبر من الإغلاق قبل 10 أيام ، وإذا كان لزيادة متغير الفوز.لقد جربت أيضا ما يلي:
for(i in 11:NROW(ticker))
if(ticker[i] > ticker[i-10])
win <- win + 1
يبدو أن كلاهما يجب أن يعملا لذلك لدي مشكلتان بالفعل.أولا الحصول عليها للعمل ، ولكن أيضا فهم الأهم لماذا لا تعمل.كلا العلم"الوسيطة بطول صفر".حدسي هو أنه شريط [ي] أو شريط [أنا-10] هذا هو الجاني.في الغالب لأنني عندما أستبدلها بقيمة مشفرة تعمل.
المحلول
تكمن المشكلة في أن المؤشر [i] لا يعرض كائنًا رقميًا لذا لا يمكنك المقارنة أو الطرح منه.جرب هذا من أجل المتعة: Genacodicetagpre
لذا ، قم فقط بلفها بتنسيق رقمي وستحصل على ما تحتاجه. Genacodicetagpre
نصائح أخرى
هذا لا علاقة له بالحلقات.ذلك لأن شتس / حديقة الحيوان يتم محاذاة من قبل فهرسها قبل تنفيذ أي عمليات. ticker[i] > ticker[j]
فارغ لأن الفهارس مختلفة.
لا تحتاج حقا إلى حلقة أيضا.يمكنك القيام بذلك بسهولة عن طريق تأخير السلسلة:
merged.ticker <- merge(ticker, lag(ticker,10))
win <- sum(merged.ticker[,1] > merged.ticker[,2], na.rm=TRUE)
lose <- sum(merged.ticker[,1] < merged.ticker[,2], na.rm=TRUE)
الأقواس المجعدة هي صديقك يا صديقي