Я хочу использовать apply для перебора матрицы, сравнивающей цены открытия и максимума с лимитом.
Изначально я использовал цикл while, но он был медленным, поэтому его перенесли на применение.
Я попытался +1 к StartingRow, как показано ниже.
Summary <- matrix(data=NA, nrow=1, ncol=1)
Overall <- matrix(data=NA, nrow=1, ncol=2)
Open <- matrix(data=NA, nrow=1, ncol=1)
MSingle <- function(x, StartingRow=1, Limit=0.01, StopLoss=0.01){
Open = x[1]
High = x[2]
Low = x[3]
#If the difference between High and Open exceeds Limit the function ends.
if (!is.na(High-Open[StartingRow]) > Limit){
Summary <<- 1
Open <<- Open
Row <<- cbind(Summary, Open)
Overall <<- rbind(Overall, Row)
}
#If the difference between Open and Low exceeds the Stoploss the function ends.
else if (!is.na(Open[StartingRow]-Low) > StopLoss){
Summary <<- 0
Open <<- Open
Row <<- cbind(Summary, Open)
Overall <<- rbind(Overall, Row)
}
#If neither of these are met then I want to compare the original Open price at time t...
#...with the high and low prices at time t+1, t+2, and so on, until either of the first two...
#...conditions is met.
else{
StartingRow = StartingRow + 1
}
}
apply(EUR_USD2, 1, MSingle)
ИСПРАВЛЕНИЕ: Первоначально это было некорректно, но с моей стороны это была ошибка при копировании кода, описанный результат от применения.
Пример матрицы EUR_USD2
Open High Low Close
[1,] 1.20037 1.20100 1.20037 1.20100
[2,] 1.20083 1.20095 1.20017 1.20030
[3,] 1.20035 1.20043 1.20035 1.20043
[4,] 1.20041 1.20050 1.20031 1.20046
[5,] 1.20049 1.20049 1.20046 1.20048`
[6,] 1.20050 1.20050 1.20048 1.20048
[7,] 1.20050 1.20069 1.20032 1.20048
[8,] 1.20048 1.20054 1.20027 1.20050
[9,] 1.20051 1.20087 1.20047 1.20087
[10,] 1.20082 1.20097 1.20076 1.20094
Ожидаемые результаты:
High[1] = 1.20100
Open[1] = 1.20037
Difference is 0.00063 (which is < Limit)
Поэтому я хочу сохранить тот же Open [1], но перейти к High [2].
High[2] = 1.20095
Open[1] = 1.20037
Разница составляет 0,00058 (что составляет <предел) и т. Д. До тех пор, пока разница не станет больше, чем предел (или меньше, чем стоп-лосс), и в этот момент функция запускается снова, но с Open [2]. </p>
Результат применения:
Summary Open
NA NA
Open 1 1.20037
Open 1 1.20083
Open 1 1.20035
Open 1 1.20041
Open 1 1.20049
Open 1 1.20050
Open 1 1.20050
Open 1 1.20048
Open 1 1.20051
Однако этот результат сравнивает (High-Open) с лимитом за тот же период.
Я хочу сравнить High-Open (разницу) с лимитом. Если это превышает предел, то первое условие выполнено. Если условие не выполнено, я хочу сохранить ту же цену открытия, но сравнить ее с максимумом следующего периода и снова протестировать против лимита.
Только тогда я хочу подать заявку, чтобы перейти к сравнению Open и High от периода 2 до Limit.
Цена открытия должна оставаться неизменной до тех пор, пока условие не будет выполнено. В настоящее время применяется сравнение High (t = 1) -Open (t = 1) с лимитом, но не сравнивает Open с какими-либо высокими значениями будущих периодов.