2016-04-22 2 views
-3

У меня есть программа торговли запасами роботов, над которой я работал несколько месяцев. На днях, хотя я добавил второе условие к коду, который определяет, когда торговля будет завершена. Состояние следующим образом:Почему не произошло это условие?

decimal entryPrice; 
decimal CurrentPrice; 
decimal openShares; 


if ((1st condition) && (((entryPrice - CurrentPrice) * openShares) >= 8)) 

Сегодня был первый день ситуация пришла, и мне пришлось иметь выходной день работы, поэтому я наблюдал торгов. Однако условие не срабатывало. Торговля продолжалась, пока я не вышла вручную.

Что должно было произойти, так это то, что он вычитал текущую цену из цены во время ввода, а затем умножил ее на количество акций, чтобы получить текущую прибыль. И если оно больше или равно 8, оно срабатывает. Этот конкретный код предназначен только для выхода из коротких сделок, поэтому вычитание текущей цены из цены входа должно возвращать положительное значение.

Я подтвердил в своем коде, что entryPrice регистрировался во время покупки. Так что все, что я могу думать, это то, что я возился с форматом условий. Либо это не похоже на расположение кронштейна, либо результирующие типы значений числа не совместимы друг с другом. Что-нибудь выпрыгивает на вас? Благодарю.

+0

Если я понимаю, что вы спрашиваете, значит, сегодня оба условия 1 и условие 2 были истинными? правильно? – jamiedanq

+0

Diagnostics.Debug.WriteLine() - ваш друг. Перед оценкой распечатайте все значения и т. Д. –

+0

Вам следует попытаться создать [mcve], включить примерные значения для 3 десятичных знаков (вы должны попытаться сравнить их с десятичным символом слишком 8 м) – Sayse

ответ

0

Не уверен относительно точной причины, но если ваше «1-е условие» неверно, второе условие вообще не будет оцениваться для многих языков. Итак, убедитесь, что «1-е условие» верно.

После этого, если проблема все еще существует, вы можете распечатать несколько сообщений журнала о значениях переменных, чтобы узнать, что происходит.

+4

Может быть добавлен как комментарий?;) – Tushar

+0

Первое условие верно, когда целевая цена встречается (на другом складе, чем тот, который торгуется), и это было правдой, а затем некоторым в этом конкретном случае. Таким образом, второе условие должно быть также оценено. –

0

Меняйте условное к

if(true){ 
//code after the conditional 
} 

Если это выполняется, тогда что-то не получает установлен должным образом в ваших скобках. (((entryPrice - CurrentPrice) * openShares) >= 8) Это ваша вторая часть состояния. Однако скобки совпадают, но я не знаю, что происходит внутри условного. Поскольку вы умножаетесь, это очень легко может быть постоянно больше 8. (возможно, вы имели в виду меньше?)

Попробуйте распечатать некоторые значения и посмотрите, что именно приведет вас. Распечатайте первое условие, затем второе условие.

Если у вас есть поддержка для неявных преобразований, попробуйте использовать побитовое И (&), а не ЛОГИЧЕСКОЕ (& &).

Таким образом, второе условие будет «разрешено» для переменной. (т. е. пробег)

Смежные вопросы