Боремся с zero divide

 

Накипело в раз... ;)))

В один день три момента, и решил бороться с ними разом.
Как оказалось это вполне простой и посильной задачей даж для чайника как я.
Применил оператор if с подстановкой другого значения если основное равно 0.
Значение может быть как статичным, например число 25 или расчётным на основе каких-то существующих данных.

1. БАЛАНС, на его данных строиться множество расчётов,
однако на реале вполне возможен слив, баланс 0, а то технический минус.
В результате лог советников покрывается записями zero divide как грибами после дождя...

double БАЛАНС=AccountBalance();
if(AccountBalance() < 0.001) БАЛАНС=1;

2. Курс баксорубль.
Нужная вещь для расчётов, но не во всех ДЦ есть этот инструмент.
Да и ситуация когда неработает текущий источник вполне веротна...
***кстати... заметил такой факт: инфа о котировке баксорубля доступна,
если даже его нет в окне обзора рынка... или это фантомы бродят по терминалу? ;)

double БАКСОРУБ=MarketInfo("USDRUR",MODE_BID);
if (MarketInfo("USDRUR",MODE_BID)==0) БАКСОРУБ=24;

3. В одном из ДЦ есть CFD на ру-акции.
И как всегда ничего не бывает так всё гладко...
Шершавым оказался пункт возвращающий стоимость тика (пипса).

double ТИКСАЙЗ=MarketInfo(Symbol(),MODE_TICKSIZE);
double ТИКЦЕНА=MarketInfo(Symbol(),MODE_TICKVALUE);
if(MarketInfo(Symbol(),MODE_TICKVALUE)==0) ТИКЦЕНА=
(MarketInfo(Symbol(),MODE_LOTSIZE) * ТИКСАЙЗ) / БАКСОРУБ;
Не знаю... правильно ли я решил вопросы, но работает вот...
 
kombat:

Накипело в раз... ;)))

double БАЛАНС=AccountBalance();
if(AccountBalance() < 0.001) БАЛАНС=1;
0.001 - это что? Что -то я не помню чтобы коль-во денег измерялось в десятых долях цента или копейки ( я не знаю, может на центовых счетах это нормально, я их и не видел, но в остальных случаях...)
double БАКСОРУБ=MarketInfo("USDRUR",MODE_BID);
if (MarketInfo("USDRUR",MODE_BID)==0) БАКСОРУБ=24;

Функция MarketInfo() возвращает значения не зависимо от Вашего окна обзора рынка. (Если нужной инфы нет в обзоре, информация в данном случае берется с сервера)
if(MarketInfo(Symbol(),MODE_TICKVALUE)==0)
MODE_TICKVALUE Если Размер минимального изменения цены инструмента в валюте депозита == 0, то получается что цена вообще не может изменится ???!!! Как так?
 

0.001 эмпирическая величина...
Всё что большее её это "нормальный, ненулевой баланс",
а всё что меньше, например 0, или -1.52, приравнено к 0, и назначается псевдовеличина 1.
Просто... ;)

MODE_TICKVALUE Если Размер минимального изменения цены инструмента в валюте депозита == 0, то получается что цена вообще не может изменится ???!!! Как так?

Вот так и есть, сервер возвращает как 0 по этим инструментам.
Причина думаю в следующем, элементарно не введена формула для расчёта,
ибо там привязка к курсу USDRUR... или "не пролазиет" в формат с двумя знаками после запятой.
Например 1 лот Сбера имеет цену пипса 0.0004227 $. Примерно...

MarketInfo

Функция () возвращает значения не зависимо от Вашего окна обзора рынка.

Упс... что-то я недочитал...
Садюсь за книгу заново. :)

 
D500_Rised:

Функция MarketInfo() возвращает значения не зависимо от Вашего окна обзора рынка. (Если нужной инфы нет в обзоре, информация в данном случае берется с сервера)


Что-то не нашел этого... и поиск не помог...

 
кстати... заметил такой факт: инфа о котировке баксорубля доступна, если даже его нет в окне обзора рынка...
Что значит "нет в окне обзора" ? Если он не отображен, это еще не значит что его нет совсем.
 

1. Ещё давно заметил что если пару используют в расчётах а её нет в маркетвоче,
то покрывался зеро девижен, после чего я просто ввел число 27. Потом 26 ... и наконец 23.
Мне это тоже надоело в предверии ввода 23 руб за бакс... :)
Видимо что-то изменилось с тех пор...

2. Ну и главное привык верить справке, а она гласит:

double MarketInfo( string symbol, int type)
Возвращает различную информацию о финансовых инструментах, перечисленных в окне "Обзор рынка".

Что предполагает работу именно с теми символами что есть сейчас в окне.
И неработу с теми что убраны оттедава...

Совсем другой смысл этот пункт имел бы при следующем:
"... о финансовых инструментах, имеющиеся на сервере у дилера."

Посему и задал пожелание в просьбах мкл5 разработчикам.
И там никто вроде не ответил пока: юзай справку, это работает...

Причина обращения: