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

 
melnikas:

Не ужели мой случай такой непростой?

double ExtVolumesBuffer[];

вы правы с местом. Перед использованием массива нужно указать его размер. Ну либо сделать его еще одним буфером

 
//+------------------------------------------------------------------+
int deinit()
  {    
  return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
  f1(); //Как сделать, что-бы после вызова функции, программа могла остановиться?
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
    return(f2());
    }
//+------------------------------------------------------------------+    
  int f2()
    {  
    return(deinit()); //Тут, по задумке, нужно остановить работу всей программы
    }
//+------------------------------------------------------------------+  
Или, из вызванной функции, работу программы остановить нельзя? (Пример кода, для использования в индикаторе)
 
fore-x:
Или, из вызванной функции, работу программы остановить нельзя? (Пример кода, для использования в индикаторе)
return(deinit());

Что значит остановить? убрать эксперта/индикатор с графика?


по поводу deinit():

не вызов deinit приводит к отключению индикатора/эксперта, а отключение приводит к вызову deinit

 
ilunga:

Что значит остановить? убрать эксперта/индикатор с графика?


по поводу deinit():

не вызов deinit приводит к отключению индикатора/эксперта, а отключение приводит к вызову deinit

Остановить, значит остановить выполнение функции старт - из вызванной функции. Как return(0).

По поводу деинит, я в курсе, вот и не знаю, как решить данную головоломку. Видимо нельзя так делать.

 
fore-x:

Остановить, значит остановить выполнение функции старт - из вызванной функции. Как return(0).

По поводу деинит, я в курсе, вот и не знаю, как решить данную головоломку. Видимо нельзя так делать.

тогда что вам мешает возвращать этой функцией (-1) или еще что-то, а уже в start() сделать вызов этой функции с проверкой? например так:

int start()
  {
  if (f1() == -1) return (0);
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
if (все плохо) return (-1); else return(0);
    }
 
ilunga:

тогда что вам мешает возвращать этой функцией (-1) или еще что-то, а уже в start() сделать вызов этой функции с проверкой? например так:

//+------------------------------------------------------------------+
int start()
  {
  if(f1() < 0) return(0);
  Alert("Есть сигнал"); // И до этого места работа программы бы не дошла
  return(0);
  }
//+------------------------------------------------------------------+  
  int f1()
    {
    return(f2());
    }
//+------------------------------------------------------------------+    
  int f2()
    {  
    return(-1); //Тут, по задумке, нужно остановить работу всей программы
    }
//+------------------------------------------------------------------+  
Я понял Вас, просто хотелось избежать лишних движух в коде, уточнил. Спасибо за приведенный пример!
 
ilunga:

вы правы с местом. Перед использованием массива нужно указать его размер. Ну либо сделать его еще одним буфером

Спасибо огромное!
 


dkfl.zrjdktdbx 09.12.2011 16:56

Добрый вечер! Представляете, столкнулся с тем, что торговый робот не закрывает позы, примерно раз в 50, при достижении профита. Он тогда должен все закрыть, отложенники и все, и выставить по новой. Незакрытие создает неразбериху ордеров и просадки.


Так представляете, иногда оказывается, что у ордера, стопудово закрытого по тейкпрофиту, Ордер Клоус Прайс - цена закрытия ордера- равно нолю!!!!!

Вот, смотрите сами на скрине, вот пятая строка снизу, ордер, условно иминуемый 49, закрылся по тейкпрофиту. А в девятой строке снизу Ордер Клоус Прайс - цена закрытия ордера равно нолю!!!!!

Так вроде нет там в коде ничего такого, особо сложного.. Щас выложу

Когда я выставляюваю ордера, я запоминаю время в пирименной wremjapomnim. Как только какой-либо ордер закрывается по-тейкпрофиту, я все ордера удаляю, и снова запоминаю время в пирименной wremjapomnim и выставляюваю.

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
Алерт здесь во-второйи третьей строках кода и пишет все в журнал, в т.ч. и то что OrderClosePrice( ) ордера 49 равен нолю.
 

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

И еще вопрос, фракталы перерисовываются или нет, ну если например образовался фрактал и через одну свечу цена пробила этот минимум, то фрактал перерисуется или просто добавится еще один?

 
Здравствуйте, подскажите пожалуйста как найти low и high последней свечи к примеру
Причина обращения: