포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 332

 
alexey1979621 :

원천



예금을 계산하는 이유는 무엇입니까? 그리고 BU()는 누구입니까?

       if (OrderSymbol()!= Symbol () && OrderMagicNumber()!=Magic) continue ; //отделяем свои ордера. Магик задается в настройках

자신의 위치를 다른 사람과 "분리"하는 이상한 방법, 더 좋지 않습니까?

       if (OrderSymbol()= Symbol () && OrderMagicNumber()=Magic) отделяем свои ордера. Магик задается в настройках
        {сюда пересчёт рыночных позиций и отложек}
 
evillive :

예금을 계산하는 이유는 무엇입니까? 그리고 BU()는 누구입니까?

자신의 입장과 타인의 입장을 "분리"하는 이상한 방법, 더 좋지 않나?

BU(); 손익분기점 기능.

내 버전이 나쁜 이유는 무엇입니까?

 сюда пересчёт рыночных позиций и отложек
그리고 내 경우에는 어떻게 보일까요?
 
alexey1979621 :
그리고 내 경우에는 어떻게 보일까요?

보이는 것처럼 중괄호가 몇 개 더 추가되었습니다.


 void CountTrades() // количество открытых ордеров
   {
     for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) 
    {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
     { 
       if (OrderSymbol()= Symbol () && OrderMagicNumber()=Magic) //отделяем свои ордера. Магик задается в настройках
      {
      int typ=OrderType();       //однократный вызов функции ускоряет работу
       switch (typ)
      {
       case 0 : bs++;
       case 1 : ss++;
       case 2 : blms++;
       case 3 : slms++;
       case 4 : bsts++;
       case 5 : ssts++;
       default : break ;
      }
      }        
     }
    }
     return ;  
   }
 
그럼 여러분 :)
 
evillive :

보이는 것처럼 중괄호가 몇 개 더 추가되었습니다.


수정, 편집, 테스트 - 문제가 남아 있음 - 특정 조건이 발생하면 고문이 거래를 시작하고 그에 따라 Take 또는 Stop Loss 로 거래를 마감합니다. 그게 다야, 고문은 거래 시작 조건이 충족된다는 사실에도 불구하고 더 이상 거래를 시작하지 않습니다.

다음은 전체 코드입니다.

 extern double   Lots             = 0.1 ;
extern string Сomment           = "Pattern_1" ;
extern int TakeProfit           = 10 ;     
extern int StopLoss             = 0 ;   
extern int Step                 = 2 ;   
extern int StepOtl              = 4 ;   


extern int BULevel              = 2 ;
extern int    NotBULevel         = 2 ;         // Уровень безубытка в пунктах

extern int Slippage             = 2 ; // проскальзывание 
extern int Magic                = 111 ;

int ticket1, ticket2, bs, ss, bsts, ssts, slms, blms; //добавил колич. ордеров по типам и их тикеты
int timeprev;
double price1, price2; //цены открытия ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
       return ( 0 );
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
 double SL,TP;
 int slv=MarketInfo( Symbol (),MODE_STOPLEVEL);
 if (Step<=slv || StepOtl<=slv) { Print ( "Step или StepOtl слишком мал" ); return ( 0 );}
 
 CountTrades();   //подсчет ордеров по типам.
 BU();
 
 //если нет рыночных ордеров-----------------------------------------
 if (bs+ss+bsts+ssts+blms+slms== 0 )                                     
 {
   if (Open[ 1 ]>Close[ 1 ] && Open[ 2 ]<Close[ 2 ] && High[ 1 ]>High[ 2 ] && Low[ 1 ]<Low[ 2 ])   // продажа
  {
   TP= NormalizeDouble (Bid - TakeProfit * Point , Digits );  
   SL= NormalizeDouble (Bid + StopLoss* Point , Digits );
   if (TakeProfit== 0 ) TP= 0 ;
   if (StopLoss== 0 ) SL= 0 ;                       
   ticket1= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage,SL,TP, "Pattern_1" ,Magic, 0 ,Red); //Сразу с тейк-профитом, магик в настройках
   if ( OrderSelect (ticket1,SELECT_BY_TICKET,MODE_TRADES)) price1=OrderOpenPrice(); //цена первого ордера
   SL= NormalizeDouble (Bid+StepOtl* Point -StopLoss* Point , Digits );
   if (StopLoss== 0 ) SL= 0 ;
   ticket2= OrderSend ( Symbol (),OP_BUYSTOP,Lots, NormalizeDouble (Bid+StepOtl* Point , Digits ), 0 ,SL, 0 , "Pattern_1" ,Magic, 0 ,Blue); //тикет для BuyStop
   if ( OrderSelect (ticket2,SELECT_BY_TICKET,MODE_TRADES)) price2=OrderOpenPrice(); //цена второго ордера
  }
  
   if (Open[ 1 ]<Close[ 1 ] && Open[ 2 ]>Close[ 2 ] && High[ 1 ]>High[ 2 ] && Low[ 1 ]<Low[ 2 ]) // покупка
  {
   TP= NormalizeDouble (Ask + TakeProfit * Point , Digits ); 
   if (TakeProfit== 0 ) TP= 0 ;
   SL= NormalizeDouble (Ask-StopLoss* Point , Digits );
   if (StopLoss== 0 ) SL= 0 ;
   ticket1= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage,SL,TP, "Pattern_1" ,Magic, 0 ,Blue); //с тейком, магик в настройках 
   if ( OrderSelect (ticket1,SELECT_BY_TICKET,MODE_TRADES)) price1=OrderOpenPrice(); //цена первого ордера
   SL= NormalizeDouble (Bid-StepOtl* Point +StopLoss* Point , Digits );
   if (StopLoss== 0 ) SL= 0 ;
   ticket2= OrderSend ( Symbol (),OP_SELLSTOP,Lots, NormalizeDouble (Bid-StepOtl* Point , Digits ), 0 ,SL, 0 , "Pattern_1" ,Magic, 0 ,Red); //тикет для SellStop
   if ( OrderSelect (ticket2,SELECT_BY_TICKET,MODE_TRADES)) price2=OrderOpenPrice(); //цена второго ордера
  }
 }
 

 return ( 0 );
}
     
 //+------------------------------------------------------------------+
void CountTrades() // количество открытых ордеров
   {
     for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) 
    {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
     { 
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic) //отделяем свои ордера. Магик задается в настройках
      {
       int typ=OrderType();       //однократный вызов функции ускоряет работу
       switch (typ)
      {
       case 0 : bs++;
       case 1 : ss++;
       case 2 : blms++;
       case 3 : slms++;
       case 4 : bsts++;
       case 5 : ssts++;
       default : break ;
      }        
     }
    }
    }
     return ;  
   }
 //+------------------------------------------------------------------+

void BU()
{
 for ( int a= OrdersTotal ()- 1 ; a>= 0 ; a--)   
 {
   if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES)) 
  {      
   if (OrderMagicNumber()!=Magic  || OrderSymbol()!= Symbol ()) continue ;
   int typ=OrderType();                                                 //вызываем функции
   int tic=OrderTicket();                                               //один раз
   double oop=OrderOpenPrice();                                         //это ускоряет работу
   double otp=OrderTakeProfit();                                         //советника
   double osl=OrderStopLoss();
   
   if (typ==OP_BUY) 
   {
     if (oop<= NormalizeDouble (Bid-BULevel* Point -NotBULevel* Point , Digits ) && oop>osl) // последнеее условие БУ + 20 пипсов
    OrderModify(tic,oop, NormalizeDouble (oop+NotBULevel* Point , Digits ),otp, 0 ,Green);
    OrderDelete(ticket2,Yellow);
   }       
 
   if (typ==OP_SELL) 
   {
     if (oop>= NormalizeDouble (Ask+BULevel* Point +NotBULevel* Point , Digits ) && (oop<osl || osl== 0 )) // последнеее условие БУ + 20 пипсов
    OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel* Point ,OrderTakeProfit(), 0 ,Red);  
    OrderDelete(ticket2,Yellow);
   } 
  }
 }
 return ;
}
 
artmedia70 :
좋은 점은 물 위의 갈퀴입니다. 빨리에 관해서는 - 또한 두 명의 할머니가 ... 그리고 그것이 싸다면 - 항목 1을 참조하십시오.

다음과 같이:

1. 좋은 점에 대해 - 물 속의 갈퀴입니다. 2. 빨리 - 할머니도 둘이서 ... 3. 그리고 싸다면 - 항목 1을 참조하십시오.

이제 명확합니다!

 
alexey1979621 :

수정, 편집, 테스트 - 문제가 남아 있음 - 특정 조건이 발생하면 어드바이저가 거래를 시작하고 그에 따라 테이크 또는 스톱로스로 거래를 마감합니다. 그게 다야, 고문은 거래 시작 조건이 충족된다는 사실에도 불구하고 더 이상 거래를 시작하지 않습니다.

다음은 전체 코드입니다.


이것은 어디에서 고려됩니까?

bs+ss+bsts+ssts+blms+slms
그들은 글로벌합니다. 그리고 체크할 때까지 0으로 재설정되지 않습니다. 그리고 확인하기 전에 계산 - 어디?
 
alexey1979621 :

수정, 편집, 테스트 - 문제가 남아 있음 - 특정 조건이 발생하면 고문이 거래를 시작하고 그에 따라 테이크 또는 손절매로 거래를 마감합니다. 그게 다야, 고문은 거래 시작 조건이 충족된다는 사실에도 불구하고 더 이상 거래를 시작하지 않습니다.

다음은 전체 코드입니다.


리메이크 BU, 마켓포지션 삭제가 불가능하며, 정지정지로 인해 더이상 포지션이 없을 예정입니다)))
 
alexey1979621 :

수정, 편집, 테스트 - 문제가 남아 있음 - 특정 조건이 발생하면 고문이 거래를 시작하고 그에 따라 테이크 또는 손절매로 거래를 마감합니다. 그게 다야, 고문은 거래 시작 조건이 충족된다는 사실에도 불구하고 더 이상 거래를 시작하지 않습니다.

다음은 전체 코드입니다.



       case 0 : bs++;   break ;
       case 1 : ss++;   break ;
       case 2 : blms++; break ;
       case 3 : slms++; break ;
       case 4 : bsts++; break ;
       case 5 : ssts++; break ;
       default : break ;
 
evillive :
리메이크 BU, 마켓포지션 삭제가 불가능하며, 정지정지로 인해 더이상 포지션이 없을 예정입니다)))


전문가가 여기에서 BU() 함수에서 중단 (주석 처리)이 필요한지 여부를 구독 취소하고 alexey1979621 이 이 함수가 거기에서 호출되는지 생각하게 하시겠습니까?

또한 CountTrades(); 따라서 OrdersTotal() 과 동일하며 더 간단하고 빠릅니다.


 void BU()
{
 bool bu= false ;
 for ( int a= OrdersTotal ()- 1 ; a>= 0 ; a--)   
 {
   if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES)) 
  {      
   if (OrderMagicNumber()==Magic  || OrderSymbol()== Symbol ())
   {
   int typ=OrderType();                                                 //вызываем функции
   int tic=OrderTicket();                                               //один раз
   double oop=OrderOpenPrice();                                         //это ускоряет работу
   double otp=OrderTakeProfit();                                         //советника
   double osl=OrderStopLoss();
   
   if (typ==OP_BUY) 
   {
     if (oop<= NormalizeDouble (Bid-BULevel* Point -NotBULevel* Point , Digits ) && oop>osl) // последнеее условие БУ + 20 пипсов
    OrderModify(tic,oop, NormalizeDouble (oop+NotBULevel* Point , Digits ),otp, 0 ,Green);
    bu= true ;
     //break;
   }       
 
   if (typ==OP_SELL) 
   {
     if (oop>= NormalizeDouble (Ask+BULevel* Point +NotBULevel* Point , Digits ) && (oop<osl || osl== 0 )) // последнеее условие БУ + 20 пипсов
    OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel* Point ,OrderTakeProfit(), 0 ,Red);  
    bu= true ;
     //break;
   } 
   if (bu== true && (typ==OP_BUYSTOP || typ==OP_SELLSTOP))
   {
    OrderDelete(tic,Yellow); 
    bu= false ;
   }       
   }
  }
 }
 return ;
}