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

 
내 이전 게시물(페이지 67)을 참조하십시오. 오류를 찾을 수 없습니다. 보류 중인 주문 이 설정되지 않았습니다.
 
nemo811 :
내 이전 게시물(페이지 67)을 참조하십시오. 오류를 찾을 수 없습니다. 보류 중인 주문이 설정되지 않았습니다.

오류가 없습니다. 더 조심해야 합니다

 #property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0 ; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0 ; //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456 ; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false; //открыть ордер SELL
extern bool BUYSTOP = false; //открыть ордер BUYSTOP
extern bool SELLSTOP = false; //открыть ордер SELLSTOP
extern double Lot = 0.1 ; //объем ордера
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 (BUYSTOP)
{
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 Stop" );
}
if (SELLSTOP)
{ 
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 Stop" );
}
return ( 0 );
}
//--------------------------------------------------------------------
void OPENORDER( string ord)
{
int error,err;
while (true)
{ error=true;
if (ord== "Buy" ) error= OrderSend ( Symbol (),OP_BUY, Lot, NormalizeDouble (Ask, Digits ),slippage,SL,TP, "BUY" ,Magic, 0 , Blue );
if (ord== "Sell" ) error= OrderSend ( Symbol (),OP_SELL,Lot, NormalizeDouble (Bid, Digits ),slippage,SL,TP, "SELL" ,Magic, 0 , Red );
if (ord== "BuyStop" ) error= OrderSend ( Symbol (),OP_BUYSTOP, Lot, NormalizeDouble (Ask, Digits ),SL,TP, "BUYSTOP" ,Magic, 0 , Blue );
if (ord== "SellStop" ) error= OrderSend ( Symbol (),OP_SELLSTOP,Lot, NormalizeDouble (Bid, Digits ),SL,TP, "SELLSTOP" ,Magic, 0 , Red );
if (error==- 1 ) //неудачная покупка OK
{ 
ShowERROR();
err++; Sleep ( 2000 );RefreshRates();
}
if (error || 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 ;
}
}
//--------------------------------------------------------------------
 
gince :

오류가 없습니다. 더 조심해야 합니다


아니, 아니. 게시물을 보지 않으셨습니다. 다른 것 바로 아래 :)). 테스트한 버전은 보류가 설정되어야 하는 현재 가격 (현재 가격만)의 수준을 지정하지 않습니다. 응답해 주셔서 감사합니다.
 
nemo811 :

아니, 아니. 당신은 게시물을 보지 않았다. 다른 것 바로 아래 :)). 테스트한 버전은 보류가 설정되어야 하는 현재 가격(현재 가격만)의 수준을 지정하지 않습니다. 응답해 주셔서 감사합니다.

OPENORDER() 함수 호출 또는 함수 자체에 문제가 있습니다.

이것이 작동하는 방식입니다

만약 (구매 중지)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); elseTP=0;

if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); elseSL=0;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);

}

 
gince :

OPENORDER() 함수 호출 또는 함수 자체에 문제가 있습니다.

이것이 작동하는 방식입니다

만약 (구매 중지)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); elseTP=0;

if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); elseSL=0;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);

}


아아아아아아!!! 컴퓨터 신들!!! 벌써 10번은 넘었어요! 작동하지 않는 이유는 무엇입니까?! 주요 시장이 열립니다. 같은 원칙에 따라 절대적으로 연기되었습니다. 그는 무엇이 부족합니까? :))))))))
 

튜토리얼에 설명된 Expert Advisor에 TrailingStopFrCnSAR_v2를 삽입하는 방법을 알려주십시오.

다른 고문 이 보류 중인 주문 을 하거나 주문을 열 때 작동하도록 주문 추적을 비활성화하려면 어떻게 해야 합니까?

 

으어어어어어어어어어어어어어!!!!!!!!! 오류 발견!

관심 있는 사람이 있으면 다음과 같은 작업 버전이 있습니다.

#property copyright "Copyright © 2010, Vladimir Khlystov"
#피

로프티 링크 "cmillion@narod.ru"
#property show_inputs
//------------------------------------------------ --------------------
extern int 손절매 = 0; //SL 설정 레벨, 0이면 SL이 설정되지 않음
extern int takeprofit = 0; //TP 설정 레벨, 0이면 TP가 설정되지 않음
extern int 매직 = 123456; //고유 주문번호
extern 부울 BUY = 거짓; //구매 주문을 엽니다.
extern bool SELL = 거짓; //오픈 매도 주문
extern bool BUYSTOP = 거짓; //BUYSTOP 주문을 엽니다.
외부 부울 SELLSTOP = 거짓; //SELLSTOP 주문 열기
외부 이중 로트 = 0.1; //주문량
extern int 미끄러짐 = 3; //시장가 주문에 대한 최대 허용 가격 편차
외부 정수 DistanceSet = 20; // 시장과의 거리
//------------------------------------------------ --------------------
이중 SL,TP;
//------------------------------------------------ --------------------
정수 시작()
{
만약 (구매)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); elseTP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); elseSL=0;
OPENORDER("구매");
}
만약 (판매)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); elseTP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); elseSL=0;
OPENORDER("판매");
}
만약 (구매 중지)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); elseTP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); elseSL=0;
OPENORDER("매수 정지");
}
(판매 중지)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); elseTP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); elseSL=0;
OPENORDER("매도 중지");
}
리턴(0);
}
//------------------------------------------------ --------------------
무효 OPENORDER(문자열 순서)
{
정수 오류, 오류;
동안 (사실)
{ 오류=참;
if (ord=="구매" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="판매") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="매수 스톱" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="판매 중지") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (error==-1) // 시도 실패
{
오류 표시();
err++;Sleep(2000);RefreshRates();
}
if (오류 || err >10) 반환;
}
반품;
}
//------------------------------------------------ --------------------
무효 ShowERROR()
{
int err=GetLastError();
스위치(오류)
{
사례 1: 반환;
사례 2: Alert("거래 서버와 연결되지 않음 ",Symbol());return;
사례 3: Alert("잘못된 매개변수 오류",Symbol());return;
case 130: Alert("티켓 종료 오류",Symbol());return;
사례 134: Alert("돈이 부족합니다. ",Symbol()); return;
사례 146: Alert("오류 거래 하위 시스템 사용 중",Symbol());return;
사례 129: Alert("오류 잘못된 가격",Symbol()); 반환;
case 131: Alert("오류 잘못된 볼륨",Symbol());return;
case 4200:Alert("오류 개체가 이미 존재합니다. ",Symbol());return;
기본값: Alert("오류 ",err," ",Symbol());return;
}
}
//------------------------------------------------ --------------------

토론에 참여해주신 모든 분들께 진심으로 감사드립니다! 너 없이는 어디에도 없어! :))))))

 
nemo811 :

으어어어어어어어어어어어어어!!!!!!!!! 오류 발견!


토론에 참여해주신 모든 분들께 진심으로 감사드립니다! 너 없이는 어디에도 없어! :))))))

여전히 코드에 오류가 있습니다.

기억하십시오: 보류 중인 중지 및 접수는 현재 가격이 아니라 주문 개시 가격 에서 계산됩니다.

 

돕다! 말씀해 주세요. 포지션의 일부를 청산하는 경우(예: 1로트 주문 및 0.5로트 청산) OrderClose에서 티켓을 변경해야 합니까? 나는 그것이 변경된다는 테스터에 씁니다 ... 이것을 어떻게 피할 수 있습니까? 아래는 종료 코드의 스니펫입니다...

1 2011.01.31 06:57 매도 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 마감 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 매도 2 2.04 1.36177 0.00000 0.00000 0.00 10070.38
4 2011.01.31 08:10 종가 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 매도 3 1.64 1.36177 0.00000 0.00000 0.00 10125.98

또 다른 질문: Cls_S==true가 트리거되면 주문을 4부분으로 나누고 각 부분을 닫아야 합니다. 카운터를 이용하려고 했는데.. 안되네요..

아무도 나에게 아이디어를 줄 수 있습니까???

미리 감사합니다!!!!

if (팁==1 && ((Cls_S0==true&&TotClS==0)||(Cls_S1==true&&TotClS==1)
||(Cls_S2==true&&TotClS==2)||(Cls_S3==true&&TotClS==3))) // 매도 주문이 열렸습니다..
{ // IT 종료 기준이 있습니다.
Alert("0.2 Lot Sell ",Ticket,". 응답을 기다리는 중입니다..");
새로 고침(); // 데이터 업데이트
Ans=OrderClose(Ticket,LotCt,Ask,5);

if (Ans==true) // 알았습니다 :)
{
TotClS++;
Alert("0.2 로트 판매 종료 ",티켓);
부서지다; // 닫기 루프에서 종료
}
if (Fun_Error( GetLastError() )==1) // 오류 처리
계속하다; // 재시도
반품; // start()에서 종료
}
부서지다; // 종료하는 동안

 
gince :
flag[] 버퍼의 임시 렌더링을 만들었습니다. 비어 있습니다. 이유는 무엇입니까? 내 실수는 어디에 있습니까?
하지만 모르겠어요. Sergeev는 알고 있으며 그것이 맞는 것 같다고 말했습니다. 또한 어떻게 올바르게 쓰는지 보고 싶습니다.
최소한의 것을 보여드리기 위해 약간 수정했습니다.
- 표시기를 별도의 창으로 이동한 다음 반환할 수 있습니다.

- macd[] 배열이 공중에 매달려 표시되도록 하여 정확도를 높였습니다.
- 개봉을 위해 복잡한 조건을 예약하고 조정을 위해 간단한 조건을 설정합니다.
- 플래그의 조건이 변경되어 어떻게 든 작동합니다.

그런 다음 점차적으로 조건을 입력할 수 있으며, 즉시 잼이 있는 곳을 볼 수 있습니다.

파일: