[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 84

 
NameLess :


코드를 살펴보고 두뇌를 망가뜨렸습니다))) 작업을 이해하기 위해 다른 사람의 코드를 찔러보는 감사할 일입니다. 이 고문을 신뢰한다면 모든 것이 잘 될 수 있도록 성공을 기원합니다)

개인적으로 나는 자전거를 발명하고 처음부터 내 자신의 코드를 작성했지만 그것이 어디에서 어떻게 작동하는지 알고 작동하지 않는 이유와 오류를 찾아야 할 위치를 압니다)

어쨌든 그런 것)


고맙습니다. 나는 이미 올바른 길을 가고 있습니다!))) 파헤쳐야했지만 원하는 것을 구현했습니다 (어쨌든 어떻게 든 작동합니다 :)))).
 
NameLess :
주문수를 어떻게 조절하는지 아세요? 동의합니다. 그 질문은 아마도 위장되지 않은 미소를 불러일으키고 때로는 웃음으로 바뀌기도 합니다.))) 그러나 저는 일주일 동안 mt 코드를 파헤치기 시작했습니다. 나도 단어를 다 몰라))) 스마트)))
 
nemo811 :
주문수를 어떻게 조절하는지 아세요? 동의합니다. 그 질문은 아마도 위장되지 않은 미소를 불러일으키고 때로는 웃음으로 바뀌기도 합니다.))) 그러나 저는 일주일 동안 mt 코드를 파헤치기 시작했습니다. 나도 단어를 다 몰라))) 스마트)))


나는 스스로를 전문가라고 부를 수 없다.

질문이 명확하지 않습니다. 숫자를 제어한다는 것은 무엇을 의미합니까? 특정 조건에서 주문을 2번 열어야 하는 경우 이 조건을 생성해야 합니다.

일반적으로 말해서, 나는 약 반년 전에 내 프로그램을 작성하기 시작했으며 한 가지 간단한 세부 사항이 도움이되었습니다. 고문이 수행하기를 원하는 작업이나 특정 코드 조각에 대해 생각하십시오. 무엇을 따라야하는지 논리적으로 생각하고 종이에 계획을 작성하십시오. 그리고 아이디어를 단계적으로 구현합니다.

이 경우 예제를 제공하는 것이 더 쉬울 것입니다. 그러면 솔루션을 알고 있으면 무엇을 어떻게 해야 하는지 더 구체적으로 말할 수 있습니다. :)

 

83페이지의 예, sergeev 의 작업

코드가 작동했습니다 - 감사합니다. 그러나 경험 많은 사람들이 그런 말을 할 때, 당신은 기꺼이 생각합니다. 무엇이 잘못되었습니까?

)))

 
nemo811 :

83페이지의 예, sergeev 의 작업

코드가 작동했습니다 - 감사합니다. 그러나 경험 많은 사람들이 그런 말을 할 때, 당신은 기꺼이 생각합니다. 무엇이 잘못되었습니까?

)))


코드가 의도한 대로 작동하면 모든 것이 그렇게 됩니다.)) 분명히 그러한 코드가 주문을 논스톱으로 열 수 있다는 것을 의미했지만 모든 것이 한 번에 열리고 연기되도록 했습니다. 모든 방법을 의미합니다)
 
NameLess :

코드가 의도한 대로 작동하면 모든 것이 그렇게 됩니다.)) 분명히 그러한 코드가 주문을 논스톱으로 열 수 있다는 것을 의미했지만 모든 것이 한 번에 열리고 연기되도록 했습니다. 모든 방법을 의미합니다)

좋은. 다시 한번 감사합니다.
 
nemo811 :

그런데. f-ii 시작을 시작할 때 다음과 같이 입력하는 것이 좋습니다.

if ( OrdersTotal()!=0)

{

BUY = false;

BUY_STOP = false;

BUY_LIMIT = false;

SELL = false;

SELL_STOP = false;

SELL_LIMIT = false;

}

이것은 열린 위치가 있는 경우에 대비하여 갑자기 클라이언트를 다시 시작해야 하는 경우를 대비한 보호 기능입니다. 그렇지 않으면 전체 주문 배치가 다시 열립니다.

또한 일반적인 조언: 각 라인에 대해 논리적으로 생각하십시오 - 무엇이 그녀의 작업을 방해할 수 있습니까? 내 조언자에 따르면 컴퓨터의 벽돌이 떨어지면 현재 오류가 있을 수 있습니다.

 
nemo811 :

여기 내가 현재 작업하고 있는 약간 오래된 버전이 있습니다. 작성자 drknn 이 퍼뜨리는 것을 허용했습니다.


업로드만 허락한 것이 아니라 원하는대로 코드를 변경하여 판매하고 누구에게나 저작권을 양도할 수 있는 권한까지 주셨습니다. :)

권리 때문에 싸우지 않습니다 :)

 
감사하다!
 
NameLess :

그런데. f-ii 시작을 시작할 때 다음과 같이 입력하는 것이 좋습니다.

if ( OrdersTotal()!=0)

{

BUY = false;

....

열린 위치가 있는 경우 갑자기 클라이언트를 다시 시작해야 하는 경우를 대비한 보호 기능입니다. 그렇지 않으면 전체 주문 배치가 다시 열립니다.

감사합니다 - 중요한 메모. 이 문제를 해결하면서 동시에 주문 계산을 알아냈습니다. 카운터를 삽입했습니다( sergeev 감사합니다).

이제 코드는 다음과 같습니다(터미널을 다시 시작할 때 너무 많이 열리지 않음).

 //--------------------------------------------------------------------
extern int      MAGIC       = 0 ;         //уникальный номер ордера
extern bool     BUY         = false;     //открыть ордер BUY
extern bool     BUY_STOP    = false;     //поставить ордер BUY STOP
extern bool     BUY_LIMIT   = false;     //поставить ордер BUY LIMIT
extern bool     SELL        = false;     //открыть ордер SELL
extern bool     SELL_STOP   = false;     //поставить ордер SELL STOP
extern bool     SELL_LIMIT  = false;     //поставить ордер SELL LIMIT
extern double   Lot         = 0.1 ;       //объем ордера
extern int      takeprofit  = 0 ;         //уровень выставления TP, если 0, то TP не выставляется
extern int      stoploss    = 0 ;         //уровень выставления SL, если 0, то SL не выставляется
extern int      DistanceSet = 40 ;       //расстояние от рынка для отложенника
extern int      Proskalz    = 3 ;         //максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
   if (BUY)
   {
       if (takeprofit!= 0 ) TP  = NormalizeDouble (Ask + takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL  = NormalizeDouble (Ask - stoploss* Point , Digits ); else SL= 0 ;     
      OPENORDER ( "Buy" );
      BUY=false;
   }
   if (SELL)
   {  
       if (takeprofit!= 0 ) TP = NormalizeDouble (Bid - takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL = NormalizeDouble (Bid + stoploss* Point , Digits );   else SL= 0 ;              
      OPENORDER ( "Sell" );
      SELL=false;
   }
   if (BUY_STOP)
   {
       if (takeprofit!= 0 ) TP  = NormalizeDouble (Ask + DistanceSet* Point + takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL  = NormalizeDouble (Ask + DistanceSet* Point - stoploss* Point , Digits ); else SL= 0 ;     
      OPENORDER ( "Buy Stop" );
      BUY_STOP=false;
   }
   if (SELL_STOP)
   {  
       if (takeprofit!= 0 ) TP = NormalizeDouble (Bid - DistanceSet* Point - takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL = NormalizeDouble (Bid - DistanceSet* Point + stoploss* Point , Digits );   else SL= 0 ;              
      OPENORDER ( "Sell Stop" );
      SELL_STOP=false;
   }
   if (BUY_LIMIT)
   {
       if (takeprofit!= 0 ) TP  = NormalizeDouble (Ask - DistanceSet* Point + takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL  = NormalizeDouble (Ask - DistanceSet* Point - stoploss* Point , Digits ); else SL= 0 ;     
      OPENORDER ( "Buy Limit" );
      BUY_LIMIT=false; 
   }
   if (SELL_LIMIT)
   {  
       if (takeprofit!= 0 ) TP = NormalizeDouble (Bid + DistanceSet* Point - takeprofit* Point , Digits ); else TP= 0 ;
       if (stoploss!= 0 )   SL = NormalizeDouble (Bid + DistanceSet* Point + stoploss* Point , Digits );   else SL= 0 ;              
      OPENORDER ( "Sell Limit" );
      SELL_LIMIT=false;
   }
return ( 0 );
}
void OPENORDER( string ord)
{
   int SchBuy=SchBuy_b(MAGIC);
   int SchSell=SchSell_b(MAGIC);
   int SchBuyStop=SchBuyStop_b(MAGIC);
   int SchSellStop=SchSellStop_b(MAGIC);
   int SchBuyLimit=SchBuyLimit_b(MAGIC);
   int SchSellLimit=SchSellLimit_b(MAGIC);
   int ticket = - 1 ;
   int err;
   while (ticket< 0 )
   {
       if (SchBuy< 1 ) { if (ord== "Buy" ) ticket= OrderSend ( Symbol (),OP_BUY, Lot, NormalizeDouble (Ask, Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}
       if (SchSell< 1 ) { if (ord== "Sell" ) ticket= OrderSend ( Symbol (),OP_SELL,Lot, NormalizeDouble (Bid, Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}
       if (SchBuyStop< 1 ) { if (ord== "Buy Stop" ) ticket= OrderSend ( Symbol (),OP_BUYSTOP, Lot, NormalizeDouble (Ask + DistanceSet* Point , Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}
       if (SchSellStop< 1 ) { if (ord== "Sell Stop" ) ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lot, NormalizeDouble (Bid - DistanceSet* Point , Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}
       if (SchBuyLimit< 1 ) { if (ord== "Buy Limit" ) ticket= OrderSend ( Symbol (),OP_BUYLIMIT, Lot, NormalizeDouble (Ask - DistanceSet* Point , Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}
       if (SchSellLimit< 1 ) { if (ord== "Sell Limit" ) ticket= OrderSend ( Symbol (),OP_SELLLIMIT,Lot, NormalizeDouble (Bid + DistanceSet* Point , Digits ),Proskalz,SL,TP, "" ,MAGIC, 0 );}      
       if (ticket==- 1 ) //неудачная попытка
      {  
         ShowERROR();
         err++; Sleep ( 2000 );RefreshRates();
      }
       if (ticket || err > 10 ) return ;
   }
return ;
}                                    
//--------------------------------------------------------------------
void ShowERROR()
{
   int err= GetLastError ();
   switch ( err )
   {                  
       case 1 :   return ;
       case 2 :   Alert ( "Нет связи с торговым сервером " , Symbol ()); return ;
       case 3 :   Alert ( "Error неправильные параметры " , Symbol ()); return ;
       case 130 : Alert ( "Error близкие стопы   Ticket " , Symbol ()); return ;
       case 134 : Alert ( "Недостаточно денег   " , Symbol ()); return ;
       case 146 : Alert ( "Error Подсистема торговли занята " , Symbol ()); return ;
       case 129 : Alert ( "Error Неправильная цена " , Symbol ()); return ;
       case 131 : Alert ( "Error Неправильный объем " , Symbol ()); return ;
       case 4200 : Alert ( "Error Объект уже существует " , Symbol ()); return ;
       default :   Alert ( "Error  " ,err, " " , Symbol ()); return ;
   }
}

+ 해당 카운터.

고맙습니다.