Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в единицах валюты депозита. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в валюте депозита |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+doubleGetProfitOpenPosInCurrency(stringsy="", intop=-1, intmn=-1){doublep=0;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(mn<0 || OrderMagicNumber()==mn){p+=OrderProfit()+OrderCommission()+OrderSwap();
}}}}}return(p);
}
ЗЫ. Во вложении скрипт для тестирования функции GetProfitOpenPosInCurrency().
Таким образом цену я привожу, только использую Digits. Но это не спасает, просто ошибка выскакивает не всегда, только в некоторых случах, от чего зависит это так и не отследил. Придется наверное руками смотреть значения которые пытается выставить робот
Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в пунктах. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в пунктах |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intGetProfitOpenPosInPoint(stringsy="", intop=-1, intmn=-1){doublep;
inti, k=OrdersTotal(), pr=0;
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if(mn<0 || OrderMagicNumber()==mn){p=MarketInfo(OrderSymbol(), MODE_POINT);
if(p==0)if(StringFind(OrderSymbol(), "JPY")<0)p=0.0001; elsep=0.01;
if(OrderType()==OP_BUY){pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
}if(OrderType()==OP_SELL){pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
}}}}}return(pr);
}
ЗЫ. Во вложении скрипт для тестирования функции GetProfitOpenPosInPoint().
В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанные с их использованием. Каждую функцию буду публиковать двумя постами. В первом посте код функции, во втором примеры использования и небольшие пояснения. Ко второму посту буду иногда прицеплять код скрипта для реального тестирования функции с отображением результатов.
Пусть первой будет функция установки ордера (версия для тестера МТ4):
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Установка ордера. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| op - операция |//| ll - лот |//| pp - цена |//| sl - уровень стоп |//| tp - уровень тейк |//| mn - Magic Number |//| ex - Срок истечения |//+----------------------------------------------------------------------------+voidSetOrder(stringsy, intop, doublell, doublepp,
doublesl=0, doubletp=0, intmn=0, datetimeex=0){colorclOpen;
interr, ticket;
if(sy=="" || sy=="0")sy=Symbol();
if(op==OP_BUYLIMIT || op==OP_BUYSTOP)clOpen=clOpenBuy; elseclOpen=clOpenSell;
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
if(ticket<0){err=GetLastError();
Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
}}//+----------------------------------------------------------------------------+
Привет помоги пожалуйста написать советника. Я в этом не бум бум но мне кажиться это хорошая идея. Смысл идеи в следующем если это конечно возможно. Надо что бы открывались две ставки одновременно одна Sell одна Buy с параметрами (lots=0.1____TafeProfit=30______StopLoss=10) и при закрытии убыточной открывалась вторая положительная с параметрами (lots=1____TafeProfit=30______StopLoss=10) И если ты дружище меня сразу на ху… не пошлёш то в идеале что бы две первоначальные ставки открывались на миниуме или на максимуме свечке или при появлении новой свечке, но если вторую часть писать долго сделай хоть только первую часть моего бреда
Заранее большое спасибо !!!! Если напишишь закинь сюда vms.80@mail.ru
Эта функция возвращает тикет последней открытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает тикет последней открытой позиции или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intGetTicketLastPos(stringsy="", intop=-1, intmn=-1){datetimeo;
inti, k=OrdersTotal(), r=-1;
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(o<OrderOpenTime()){o=OrderOpenTime();
r=OrderTicket();
}}}}}}}return(r);
}
ЗЫ. Во вложении скрипт для тестирования функции GetTicketLastPos().
Привет помоги пожалуйста написать советника. Я в этом не бум бум но мне кажиться это хорошая идея. Смысл идеи в следующем если это конечно возможно. Надо что бы открывались две ставки одновременно одна Sell одна Buy с параметрами (lots=0.1____TafeProfit=30______StopLoss=10) и при закрытии убыточной открывалась вторая положительная с параметрами (lots=1____TafeProfit=30______StopLoss=10) И если ты дружище меня сразу на ху… не пошлёш то в идеале что бы две первоначальные ставки открывались на миниуме или на максимуме свечке или при появлении новой свечке, но если вторую часть писать долго сделай хоть только первую часть моего бреда
Заранее большое спасибо !!!! Если напишишь закинь сюда vms.80@mail.ru
А может отправить товарищу все советники из CodeBase по этому адресу.
Функция GetProfitOpenPosInCurrency().
Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в единицах валюты депозита. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции GetProfitOpenPosInCurrency().ошибся с кодом, не 131 а 130
понятно...
Попробуйте нормализовать следующим образом:
Я так делаю и с ошибкой 130 не сталкиваюсь.Таким образом цену я привожу, только использую Digits. Но это не спасает, просто ошибка выскакивает не всегда, только в некоторых случах, от чего зависит это так и не отследил. Придется наверное руками смотреть значения которые пытается выставить робот
В свете возможных наконец то подвижек в будущем, это дополнение вполне пригодится:
интересно, в пятёрке он будет...? ;)))Очередное спасибо за подсказку как суммировать данные в цикле!
ё-МоЁ, пошутили что-ли? У меня компилятор не понимает функцию OrderTaxes().
Конечно!!! :)))
Это-ж видно в подсветке, да и в комменте явно на это указал...
Хотя это одно из свойств ордера, точнее позиции и такая функция в принципе должна быть.
-
Ну а то что компилятор не понимает...
так ГНИ научит ;)
Функция GetProfitOpenPosInPoint().
Эта функция возвращает суммарный профит открытых на данный момент позиций. Профит возвращается в пунктах. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции GetProfitOpenPosInPoint().В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанные с их использованием. Каждую функцию буду публиковать двумя постами. В первом посте код функции, во втором примеры использования и небольшие пояснения. Ко второму посту буду иногда прицеплять код скрипта для реального тестирования функции с отображением результатов.
Начну с функций, предназначенных для работы с ордерами, по просьбе Lukyanov в теме "Как два советника одновременно запустить" в конце.
Пусть первой будет функция установки ордера (версия для тестера МТ4):
Привет помоги пожалуйста написать советника. Я в этом не бум бум но мне кажиться это хорошая идея. Смысл идеи в следующем если это конечно возможно.
Надо что бы открывались две ставки одновременно одна Sell одна Buy с параметрами (lots=0.1____TafeProfit=30______StopLoss=10) и при закрытии убыточной открывалась вторая положительная с параметрами (lots=1____TafeProfit=30______StopLoss=10)
И если ты дружище меня сразу на ху… не пошлёш то в идеале что бы две первоначальные ставки открывались на миниуме или на максимуме свечке или при появлении новой свечке, но если вторую часть писать долго сделай хоть только первую часть моего бреда
Заранее большое спасибо !!!! Если напишишь закинь сюда vms.80@mail.ru
Функция GetTicketLastPos().
Эта функция возвращает тикет последней открытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции GetTicketLastPos().Привет помоги пожалуйста написать советника. Я в этом не бум бум но мне кажиться это хорошая идея. Смысл идеи в следующем если это конечно возможно.
Надо что бы открывались две ставки одновременно одна Sell одна Buy с параметрами (lots=0.1____TafeProfit=30______StopLoss=10) и при закрытии убыточной открывалась вторая положительная с параметрами (lots=1____TafeProfit=30______StopLoss=10)
И если ты дружище меня сразу на ху… не пошлёш то в идеале что бы две первоначальные ставки открывались на миниуме или на максимуме свечке или при появлении новой свечке, но если вторую часть писать долго сделай хоть только первую часть моего бреда
Заранее большое спасибо !!!! Если напишишь закинь сюда vms.80@mail.ru
А может отправить товарищу все советники из CodeBase по этому адресу.
Извини Игорь, что не в тему. Если что, удалю.
А может отправить товарищу все советники из CodeBase по этому адресу.