[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 176

 

Подскажите, пожалуйста, как корректно сравнивать текущую цену или скользящую среднюю с трендовой линией?

Заранее благодарю.

    double maH_fast=iMA(NULL,fast_maH_timeframe,fast_maH_period,0,fast_maH_method,fast_maH_price,0);

    if (ObjectFind("Tr_S1")==-1)
     {
      Create_Tr_S("Tr_S1",White,timf2s,TF2S,timf1s,TF1S);
     }

    if(maH_fast>"Tr_S1")
     {...}
 
ikatsko:

КАК БЫ ПО ХОДУ РАБОТЫ СОВЕТНИКА СЧИТАТЬ КОЛИЧЕСТВО ПРОФИТНЫХ ДЛИННЫХ ПОЗИЦИЙ И ОТДЕЛЬНО КОЛИЧЕСТВО ПРОФИТНЫХ КОРОТКИХ ПОЗИЦИЙ?

Стратегия предполагается такой: если количество профитных длинных позиций с начала работы советника (а лучше - за всю историю счета) больше, чем коротких, то разрешать открывать только длинные позиции. И наоборот.

Понятно как посчитать указанные сделки, если они закрываются советником: закрыли - посчитали. Но если позиция закрывается по ТР или SL, то ... ?

Может и готовый код функции у кого есть?


int ProfitableOrdersOfLongs(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()==0)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
//====================================================================================================== 
int ProfitableOrdersOfShorts(){
   int i,Orders=0; 
   for(i=0;i<OrdersHistoryTotal();i++){
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()=1)if(OrderProfit()>0) Orders++;              
    }  
return(Orders);} 
 
nemo811:

Подскажите, пожалуйста, как корректно сравнивать текущую цену или скользящую среднюю с трендовой линией?

Заранее благодарю.

У трендовой линии есть начальная точка с координатами время-цена и конечная точка с координатами время-цена.

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

Можете почитать - там подробно описан подобный пример.

 
Roman.:

Берете последний закрытый, сравниваете его время закрытия с предыдущим закрытым через OrderCloseTime(), если оно одно и тоже, то сравниваете его с временем закрытия предпредыдущего Вашего закрытого ордера... как то так, естественно, все это в цикле - от последнего закрытого к первому, последовательно идете и сравниваете время закрытий ордеров... еще - распринтуйте значения времени закрытия последних, заранее известных Вам ордеров, что они закрылись одновременно (по Вашему), допустим трех ордеров, не исключено, что оно будет различно, даже при Вашем понимании "одновременно", т.е. как я понимаю, на закрытие ордеров - в любом случае очередь идет на закрытие, т.е. реально время закрытия допустим трех сразу ордеров не может быть одно и тоже - Вы сами распринтуйте через Print() и посмотрите значения трех Ваших ОДНОВРЕМЕННЫХ ордеров - их значения характеристики OrderCloseTime(), т.е. не исключено, что будет необходимо вводить понятие ОДНОВРЕМЕННОСТИ закрытия, а именно - отклонение времени закрытия нескольких ордеров на какую-либо малую величину, когда еще можно считать, что они закрылись одновременно. Отсюда уже и "плясать"- сами поэкспериментируйте, посмотрите.

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

сделал вот так

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
 
vik-777:

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

сделал вот так

вопрос решен всем спасибо

OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер 
tik=OrderCloseTime();
for (int l=OrdersHistoryTotal(); l>=0; l--) 
{
OrderSelect(l, SELECT_BY_POS, MODE_HISTORY);
if (OrderType()==OP_BUY||OP_SELL)
 {
  if (OrderMagicNumber()==1)
   {
   if (OrderProfit()<0)
    {
     if (OrderClosePrice()!= OrderStopLoss())
     {
     if (tik<=OrderCloseTime())
     {
     a = OrdersHistoryTotal();
     if (a>w)
     {
     if (sarik>0)
      {   
      OrderSend(Symbol(),OP_BUY,Lot1,NormalizeDouble(Ask,4),1,Ask - SL1*Point,Ask + 10*Point,0,2);
      w++;
      }
 
nemo811:

Подскажите, пожалуйста, как корректно сравнивать текущую цену или скользящую среднюю с трендовой линией?

1. if(maH_fast>"Tr_S1") {...} -- ошибка: maH_fast - действительное число, "Tr_S1"- значение строкового типа;
2. double ObjectGetValueByShift( string name, int shift)
Функция вычисляет и возвращает значение цены для указанного бара (смещение относительно текущего бара). Значение цены вычисляется при помощи линейного уравнения по первой и второй координатам. Применяется для трендовых линий.
Параметры:
name - Имя объекта.
shift - Номер бара.
Пример: double price=ObjectGetValueByShift("MyTrendLine#123", 11);
 
Здравствуйте! у меня вот такой вопрос.. допустим через iHighest и iLowest можно узнать номер бара с максимальным значением хая/лоу за определенный период, а вот как узнать максимальное значение индикатора st Dev за определенное число баров?
 
double maxdev,mindev=1;
for(int i=0;i<counbar;i>0)
{
double val=iStdDev(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,i);
if(mindev>val)mindev=val;
if(maxdev<val)maxdev=val;
}
Print("maxdev - ",maxdev," mindev - ",mindev);
Где-то так.
 
7sintez:

Все посмотрел.., все сделал... Не открывает позиции и все тут! Закрывает исправно но никак не открывает... Что делать - ума не приложу! Может кто найдет косяк в программе?




На пятиминутном EURUSD исправно открывает и закрывает ордера. Небольшие проблемы с модификацией, часто пытается модифицировать с теми же значениями, поэтому частые ошибки.
 

Привет всем. Помогите, плиз, начинающему:

суть вопроса

1)период 1 день.

2)есть открытый ордел OrderSend(...). К нему SL и TP. Но как дополнительное условие к стопу и лосу, нужно задать, что ордер живёт с момента открытия не более 18 часов и закрывается затем по текущей цене.

т.е., должно выполнится одно из 3 условий:

1. срабатывает стоп-лосс

или

2. срабатывает тэйк-профит

или

3. т.к. не сработал ни стоп-лосс, ни тэйк-профит, позиция закрывается по истечении 18 часов с момента открытия по текущей на тот момент цене.

Вот как задать это временное условие, а???


Вопрос 2:

как корректно прописать условие, что что событие должно произойти, если( 1 день период):

- CLOSE текущего бара больше С предыдущего и больше С пред-предидущего, и С предыдущего также больше С пред-предидущего.


Сильно не бейте, плиз. До этого сидел на Румусе, и сейчас перестраиваюсь...

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