Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если есть метод дающий 100% результат, так зачем применять другой метод,
у кторого вероятность правильного результата 99,9% ?
Ничего в жизни нельзя гарантировать на 100%.
Совершенно верно.
Чтобы исключить клиринговые сделки, нужно проверять сделки на тикеты ордеров, по которым была совершенв сделка.
Если тикет ордера > 0, то это боевая сделка.
if(order_ticket > 0)
{
ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY(HistoryDealGetInteger(deal_ticket, DEAL_ENTRY));
Совершенно верно.
Чтобы исключить клиринговые сделки, нужно проверять сделки на тикеты ордеров, по которым была совершенв сделка.
Если тикет ордера > 0, то это боевая сделка.
if(order_ticket > 0)
{
ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY(HistoryDealGetInteger(deal_ticket, DEAL_ENTRY));
Т.Е. функция для расчета профита по позиции приобретает вот такой вид....да? Правильно?
{
double profit=0;
if(HistorySelectByPosition(id))
{
int deals=HistoryDealsTotal();
for(int i=0;i<deals; i++)
{
ulong order_ticket = (ulong)HistoryDealGetInteger(deals, DEAL_ORDER);
if(order_ticket > 0)
{
ulong deal_ticket=HistoryDealGetTicket(i);
if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT)
{
profit+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
}
}
}
}
}
Т.Е. функция для расчета профита по позиции приобретает вот такой вид....да? Правильно?
{
double profit=0;
if(HistorySelectByPosition(id))
{
int deals=HistoryDealsTotal();
for(int i=0;i<deals; i++)
{
ulong order_ticket = (ulong)HistoryDealGetInteger(deals, DEAL_ORDER);
if(order_ticket > 0)
{
ulong deal_ticket=HistoryDealGetTicket(i);
if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT)
{
profit+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
}
}
}
}
}
Похоже на то. Только делайте перебор с конца - будет экономия:)
Конечно, если предварительно добавить условие, что при встрече с IN сделкой выйти из цикла.
Не, нужно вначале выбрать сделку, а только потом с ней манипулировать...Похоже на то. Только делайте перебор с конца - будет экономия:)
Конечно, если предварительно добавить условие, что при встрече с IN сделкой выйти из цикла.
Не, нужно вначале выбрать сделку, а только потом с ней манипулировать...По идее, в этой функции, я выбираю нужную позицию(ID) на истории, подгружаю все связанные с ней ордера и сделки, перебираю их и если ордер не нулевой, выбираю сделку по номеру и там уже выбираю тот параметр который мне нужен.
Дело в том, что меня интересует иногда не последяя позиция, а конкретная, со своим ID, поэтому перебор в пределах этой позиции все равно откуда начинать, да и позиция может набираться из множества ордеров, и закрываться может по частям....поэтому выбран такой перебор.
По идее, в этой функции, я выбираю нужную позицию(ID) на истории, подгружаю все связанные с ней ордера и сделки, перебираю их и если ордер не нулевой, выбираю сделку по номеру и там уже выбираю тот параметр который мне нужен.
Дело в том, что меня интересует иногда не последяя позиция, а конкретная, со своим ID, поэтому перебор в пределах этой позиции все равно откуда начинать, да и позиция может набираться из множества ордеров, и закрываться может по частям....поэтому выбран такой перебор.
По идее, в этой функции, я выбираю нужную позицию(ID) на истории, подгружаю все связанные с ней ордера и сделки, перебираю их и если ордер не нулевой, выбираю сделку по номеру и там уже выбираю тот параметр который мне нужен.
ulong order_ticket = (ulong)HistoryDealGetInteger(deals, DEAL_ORDER);
Тут нужно deals заменить на deal_ticket, но сначала нужно выбрать сделку!
Про позицию нет разговора. Вы ее выбрали - все отлично. По поводу перебора сделок. Тут да, если Вы закрыли часть позиции, потом еще отправили ордера и потом закрыли всю позицию - нужно обойти все сделки. Но сейчас Вы обход делаете не правильно.
ulong order_ticket = (ulong)HistoryDealGetInteger(deals, DEAL_ORDER);
Тут нужно deals заменить на deal_ticket, но сначала нужно выбрать сделку!
{
double profit=0;
if(HistorySelectByPosition(id))
{
int deals=HistoryDealsTotal();
for(int i=0;i<deals;i++)
{
ulong deal_ticket=HistoryDealGetTicket(i);
ulong order_ticket=(ulong)HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
if(order_ticket>0)
{
if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT)
{
profit+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
}
}
}
}
}
Вот так?
{
double profit=0;
if(HistorySelectByPosition(id))
{
int deals=HistoryDealsTotal();
for(int i=0;i<deals;i++)
{
ulong deal_ticket=HistoryDealGetTicket(i);
ulong order_ticket=(ulong)HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
if(order_ticket>0)
{
if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT)
{
profit+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
}
}
}
}
}