Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1598
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
просто добавление, НЕ ГАРАНТИРУЕТСЯ что терминал имеет и отдаст достаточную историю.
в примере выше нет обращения к истории
поэтому гарантируется, если результат OrderSelect() будет true
UPD: OrderSelect в 4-ке очень хорошо работает, тестировал когда то - для рыночных ордеров время обращения к сврйствам ордеров.... реально миллионы раз в секунду, не охота искать, кажется с модератором Артемом спорил, но тут как говорится "на вкус все фломастеры разные", нравится - храните
здравствуйте, есть необходимость в данных по просадке по каждой сделке.
Может кто встречал скрипт, сбора такой статистики и вывода в виде отчета?
спасибо
здравствуйте, есть необходимость в данных по просадке по каждой сделке.
Может кто встречал скрипт, сбора такой статистики и вывода в виде отчета?
спасибо
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
написано "с руки", не проверялось, изобилует ошибками :-) подправьте под свои нужды и пользуйтесь
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
написано "с руки", не проверялось, изобилует ошибками :-) подправьте под свои нужды и пользуйтесь
спасибо, попробую разобраться!
@Igor Makanu, большое спасибо за ответы по поводу сортировки ордеров в терминале. Я, пожалуй, сохраню их как массив структур и отсотирую его самостоятельно. Сомнения были главным образом потому, что я опасался, что такие действия, выполняемые на каждом тике, окажут заметное негативное влияние на производительность.
Так а зачем сортировать на каждом тике? Достаточно только при изменении количества записей или полного изменения списка…
в примере выше нет обращения к истории
поэтому гарантируется, если результат OrderSelect() будет true
UPD: OrderSelect в 4-ке очень хорошо работает, тестировал когда то - для рыночных ордеров время обращения к сврйствам ордеров.... реально миллионы раз в секунду, не охота искать, кажется с модератором Артемом спорил, но тут как говорится "на вкус все фломастеры разные", нравится - храните