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

 

도와주세요. 82페이지의 EA 변형은 작동 중이지만(1 가지 유형의 거래 를 열기 위해 작성됨) 아래의 변형(모든 유형의 주문에 대해)은 오류가 있는 것으로 나타났습니다. 모든 틱에서 주문을 엽니다.

내 실수가 뭐야?

 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      slippage    = 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" );
   }
   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" );
   }
   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" );
   }
   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" );
   }
   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" );
   }
   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" );
   }
return ( 0 );
}
void OPENORDER( string ord)
{
int ticket = - 1 ;
int err;
while (ticket< 0 )
{
if (ord== "Buy" ) ticket= OrderSend ( Symbol (),OP_BUY, Lot, NormalizeDouble (Ask, Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ord== "Sell" ) ticket= OrderSend ( Symbol (),OP_SELL,Lot, NormalizeDouble (Bid, Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ord== "Buy Stop" ) ticket= OrderSend ( Symbol (),OP_BUYSTOP, Lot, NormalizeDouble (Ask + DistanceSet* Point , Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ord== "Sell Stop" ) ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lot, NormalizeDouble (Bid - DistanceSet* Point , Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ord== "Buy Limit" ) ticket= OrderSend ( Symbol (),OP_BUYLIMIT, Lot, NormalizeDouble (Ask - DistanceSet* Point , Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ord== "Sell Limit" ) ticket= OrderSend ( Symbol (),OP_SELLLIMIT,Lot, NormalizeDouble (Bid + DistanceSet* Point , Digits ),slippage,SL,TP, "" ,Magic, 0 );
if (ticket==- 1 ) //неудачная попытка
{  
ShowERROR();
err++; Sleep ( 2000 );RefreshRates();
}
}
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 ;
   }
}

미리 감사드립니다.

 
nemo811 :

도와주세요. 82페이지의 EA 변형은 작동 중이지만(1가지 유형의 거래를 시작하기 위해 작성됨) 아래에 있는 변형(모든 유형의 주문에 대해)은 오류가 있는 것으로 나타났습니다. 모든 틱에서 주문을 엽니다.

내 실수가 뭐야?

미리 감사드립니다.

코드에서 주문 수의 제어는 어디에 있습니까?

 
nemo811 :


간단히 말해서 고문의 아이디어는 무엇입니까? 언뜻보기에이 코드는 거래를 전혀 열지 않습니다.

플래그의 값을 변경하고 거래가 한 번 열렸지만이 EA가하는 일을 이해하지 못합니다)))

 
nemo811 :


extern int Magic = 0; //уникальный номер ордера
extern bool BUY = true; //открыть ордер BUY
extern bool BUY_STOP = true; //поставить ордер BUY STOP
extern bool BUY_LIMIT = true; //поставить ордер BUY LIMIT
extern bool SELL = true; //открыть ордер SELL
extern bool SELL_STOP = true; //поставить ордер SELL STOP
extern bool SELL_LIMIT = true; //поставить ордер 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 slippage = 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 ticket = -1;
int err;
while (ticket<0)
{
if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Buy Stop" ) ticket=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Buy Limit" ) ticket=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ticket==-1) //неудачная попытка
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
}
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;
}
}

일반적으로 이 형식에서 그는 주문을 한 번 열고 한 번에 하나의 보증금을 내립니다.

 
NameLess :


간단히 말해서 고문의 아이디어는 무엇입니까? 언뜻보기에이 코드는 거래를 전혀 열지 않습니다.

플래그의 값을 변경하고 거래가 한 번 열렸지만이 EA가하는 일을 이해하지 못합니다)))


)))) 이것은 다른 Expert Advisor의 일부입니다. 나는 벽돌로 벽돌을 수집합니다))
 
다른 하나의 의미는 각 쌍에 대해 전체 이익 또는 이익을 별도로 취하는 것입니다(다각화를 사용할 때 편리함). + 가능한 것과 기타 기능을 추적합니다. Expert Advisor drknn universal_1_7이 기본으로 사용됩니다.
 
nemo811 :
다른 하나의 의미는 각 쌍에 대해 전체 이익 또는 이익을 별도로 취하는 것입니다(다각화를 사용할 때 편리함). + 가능한 것과 기타 기능을 추적합니다. Expert Advisor drknn universal_1_7이 기본으로 사용됩니다.

이 코드는 단순히 스프레드와 오프닝 간의 차이를 합산하지만 현재 옵션은 마이너스를 누적합니다. 여기서 이익이 어디로 갈지는 모르겠지만)
 
NameLess :

이 코드는 단순히 스프레드와 오프닝 간의 차이를 합산하지만 현재 옵션은 마이너스를 누적합니다. 여기서 이익이 어디로 갈지는 모르겠지만)

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

일반적으로 이 형식에서 그는 주문을 한 번 열고 한 번에 하나의 보증금을 내립니다.

고마워, 효과가 있었다! )) 주문 수의 통제를 결정하는 것이 남아 있습니다.
 
nemo811 :
감사합니다. 효과가 있었습니다! )) 주문 수의 통제를 결정하는 것이 남아 있습니다.


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

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

어쨌든 그런 것)