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

 

Привет ! Вопрос в следующем как узнать что объект удален в ручную если о объекте мы знаем только его описание . то есть есть объект с неизвестным именем , к данному объекту прикреплен тейк профит, если обьект удален удалить тейк профит , при этом имя обьекта мы не знаем ....

Может есть возможность как то изменить имя объекта ???? 

 

Помогите пожалуйста доработать советник!!!Я хочу,что-бы по приходу сигнала открывался один ордер,по приходу следующего ещё один и т.д.,независимо от того есть открытые ордера или нет.

Подскажите,что неправильно!!!

                   

 m0=iMA(NULL,0,PeriodMA,0,MODE_SMA,PRICE_CLOSE,0);
    m1=iMA(NULL,0,PeriodMA,0,MODE_SMA,PRICE_CLOSE,1);
    lwma=iMA(NULL,0,PeriodLWMA,0,MODE_LWMA,PRICE_CLOSE,0);
    lwma1=iMA(NULL,0,PeriodLWMA,0,MODE_LWMA,PRICE_CLOSE,1);
    sar=iSAR(NULL,0,step,maximum,0);
    sar1=iSAR(NULL,0,step,maximum,1);
//+------------------------------------------------------------------+
   
      Lots=NormalizeDouble(AccountFreeMargin(),0)*MaxRisk/1000;
     if(Lots<0.01) 
    return(Lot);
//--------------------------------------------------------------------
    balans=NormalizeDouble(AccountFreeMargin(),2);
//--------------------------------------------------------------------
   total=OrdersTotal();
   if(OrdersTotal()>=0)
     {
   x=1;
   x++;  
//==========================Медленный==================================
   if( m1>lwma1 && m0<lwma && balans>0 && total<x)
     {
     ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl*Point,Ask-tp*Point,"0",Magik,0,Red);
     }
   if(ticket>0)
     {
     Alert("Продажа №",ticket,"\n",Symbol());
     return(0);
     }
//-------------------------------------------------------------------- 
   if ( m1<lwma1 && m0>lwma && balans>0 && total<x)
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl*Point,Bid+tp*Point,"0",Magik,0,Blue);
     }
  if(ticket>0)
     {
      Alert("Покупка № ",ticket,"\n",Symbol());
      return(0);  
     }
//========================Быстрый=====================================
   
    if(sar1<Bid && sar>Ask && balans>0 && total<x)
      {
       ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl1*Point,Ask-tp1*Point,"0",Magik1,0,Red); return;
      }
    if(ticket>0)
      {
      Alert("Продажа №",ticket,"\n",Symbol());
       return(0);
      }
//---------------------------------------------------------------------
  if(sar1>Ask && sar<Bid && balans>0 && total<x)
      {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl1*Point,Bid+tp1*Point,"0",Magik1,0,Blue);
      }
   if(ticket>0)
     {
         Alert("Покупка №",ticket,"\n",Symbol());
         return(0);
        }
       }
 

тупик.....

 

if(Ma_1>Ma_2 && flagg==0)  {PlaySound("news.wav"); flagg=1; flag=0; }

if(Ma_1<Ma_2 && flag==0) {PlaySound("ok.wav");        flag=1; flagg=0; }

      

Print(flag,flagg); 

 

 Ма_1 - короткая
Ма_2 - длинная

при  Ma_1>Ma_2 сигналит news.wav без остановки, и принтует 0  1 (т.е flag=0 flagg=1)

но как так может быть, что при   flagg=1 выполняется условие (Ma_1>Ma_2 && flagg==0) и проходит {PlaySound("news.wav")  ??? 

 
Добрый день всем, мне нужно переделать советник чтоб от закрывал все позиции после достижения определеньго процента от начальной суммы еквити то есть если не открыто не одного ордера например еквити 1000 и % от еквити установлено на 5% то есть чтоб он закрывал все позиции при еквити 1050 , я сделал чтоб советник записал глобальную переменную и чтоб он с этого значение считал и закрывал позиции но советник не хочет закрывать,а так получается что баланс увеличивается и чтоб закрывал при 5% от еквити получается уже не 1050 значение еквити а иногда намного больше и нужно иногда ждать очень много или получается что цена меняет направление и вместо прибыли получается убыток, помогите кто знает и сталкивался с глобальными переменами!!! Спс зарание за ответ.
Файлы:
 
Доброго вечера! Скажите, верно ли я понимаю, что в 
iStochastic
mode
это имено линию K или D я имею ввиду? Причем, 0- это  K, а 1-это  D? 
 

А посмотрите на такой вариант, без глобальных переменных.

if(Profit>AccountEquity( )*koefitsientudaleniya){  
   int Total=OrdersTotal();
    for( i=OrdersTotal()-1;i>=0;i--){
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if(OrderSymbol() != Symbol()) continue; 
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) {
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);Print(" i " , i,"  GetLastError()CloseOP_SELL ", GetLastError()  );}
   if(OrderType()==OP_BUY)  {
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);Print(" i " , i,"  GetLastError()CloseOP_BUY ", GetLastError()  );}}} и виличины, закрываем все ордера!
//----
 
 
Да, до смены машек сигналов быть не должно!! Вроде..    Наверно, смотрите весь код! Не знаю, из показаного вроде не видно...
 
так советник ждет пока прибыль выйдет в + потом закрывает а мне нужно чтоб советник  запомнил значение еквити когда нету открытых ордеров  например это 1000 а как написал %-5 и значение еквити будет 1050 при закрытие всех позиции , а так как получается некоторые ордера закрывается и баланс растет а прибыль в минус  от обших ордеров и советник жет пока прибыль выйдет в + потом закрывает все позиции
 
lottamer:

тупик.....

 

if(Ma_1>Ma_2 && flagg==0)  {PlaySound("news.wav"); flagg=1; flag=0; }

if(Ma_1<Ma_2 && flag==0) {PlaySound("ok.wav");        flag=1; flagg=0; }

      

Print(flag,flagg); 

 

 Ма_1 - короткая
Ма_2 - длинная

при  Ma_1>Ma_2 сигналит news.wav без остановки, и принтует 0  1 (т.е flag=0 flagg=1)

но как так может быть, что при   flagg=1 выполняется условие (Ma_1>Ma_2 && flagg==0) и проходит {PlaySound("news.wav")  ??? 


Распечатайте состояние флагов отдельно для каждого условия. У вас получается так потому, что в условиях не учитывается состояние второго флага.

P.S. И удобнее, чтобы не путаться распечатывать Print("flag=",flag,"flagg=",flagg);

 

Вот так у меня, на демке стоит робот. Я уж детально е помню, как придумал написать. 

if(Profit>AccountBalance()*koefitsientudaleniya){
int Total=OrdersTotal();
for( i=OrdersTotal()-1;i>=0;i--){
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != 450) continue;
if(OrderType()==OP_SELL) {
OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);Print(" i " , i," GetLastError()CloseOP_SELL ", GetLastError() );}
if(OrderType()==OP_BUY) {
OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);Print(" i " , i," GetLastError()CloseOP_BUY ", GetLastError() );}}} // Если профит больше некой задуманой нами виличины, закрываем все ордера!
//----

 

Ну или пусть старшие товарищи посоветуют.. 

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