[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1044

 
eddy:
не интересует. мне бы линию провести..
Точки на рис. это макс мин ?
 
нет, клозы
 
costy_:

Это для не стандартного подхода, того чего нет в отчете оптимизатора. файл здесь terminal\tester\files

Сохраняйте отчет из "Результаты оптим." сохран как>>


Как что-то нужное сохранить я теперь понял. Подскажите как автоматом сохранять результаты оптимизации. В принципе волнует только максимальная просадка и прибыль.
 
001:

Как что-то нужное сохранить я теперь понял. Подскажите как автоматом сохранять результаты оптимизации. В принципе волнует только максимальная просадка и прибыль.

В дэините считаете через OrdersHistoryTotal сумму всех прибыльных, убыточных, просадку, прибыль и в файл ;)

Что то вроде этого

   for(i=0;i<OrdersHistoryTotal();i++)
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol())
    if(OrderProfit()>=0)
     profit+=OrderProfit();
     else noprof+=OrderProfit();
   прибыль = profit  -  noprof;



 
eddy:
нет, клозы

Примерно так, на младшем периоде можно просмотреть вектор старшего на графике Н1 в настройках инд Н4.

И зачем он?!

Файлы:
maxvekt.mq4  2 kb
 
costy_:

В дэините считаете через OrdersHistoryTotal сумму всех прибыльных, убыточных, просадку, прибыль и в файл ;)

Что то вроде этого




Да, это есть. К сожалению такой способ дает данные, отличающиеся от МТ. Нужно просто атоматом сохранять в файл результаты оптимизации и все...
 
мне непонятен расчёт. на примере моего рисунка можешь объяснить?
 
costy_:

Вы листаете открытые и отложенные ордера по порядку номера позиции в списке, выбрав тот что интересует извлекаете его тикет

и продолжаете работу уже с тикетом.



спасибо за ответ.

Скажите а зачем это нужно делать если мы итак уже выбрали этот же ордер?

или я чего то недопонимаю: ЭТОТ код :

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }

и этот:

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }

сделают одно и то же?

 
Aleksandr_8:

спасибо за ответ.

Скажите а зачем это нужно делать если мы итак уже выбрали этот же ордер?

или я чего то недопонимаю: ЭТОТ код :

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal()-1; cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }
}

и этот:

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal()-1; cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }
}

сделают одно и то же?

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

 
Aleksandr_8:

спасибо за ответ.

Скажите а зачем это нужно делать если мы итак уже выбрали этот же ордер?

или я чего то недопонимаю: ЭТОТ код :

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }

и этот:

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }

сделают одно и то же?

В первом варианте второй OrderSelect по ticketbuy, использует вторую проверку, наверно (если проскочит открытие по отложенику чтоли +1 ордертотал...).

В предыдущем посте правильно найденные ошибки (кроме зеленых).

Тикет бай во втором не обозначен. Надо определить

string symbol = Symbol();int cnt;
for(cnt = OrdersTotal(); cnt >= 0; cnt--){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy) {
lotsbuy2=OrderLots() ;
double bid = MarketInfo(symbol,MODE_BID);
ticketbuy=OrderTicket();
RefreshRates();
OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta); }
Причина обращения: