코딩 도움말 - 페이지 143

 
arroganzmaschine:
헤이 mladen, 질문 하나 더:

이익이 -20 미만인 경우 모든 미결 주문을 확인하고 닫을 수 있습니까?

이 같은?

//int currentTicket;

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);

if(OrderProfit() <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

아로간즈마신

네, 그렇게 해야 합니다.

이익을 확인 하는 줄만 다음과 같이 변경할 수 있습니다.

if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)

확인하고 있는 "순수한" 이익인지 확인하기 위해

 

OrderClose에서 Bid 또는 Ask를 설정해야 합니까? 아니면 라인이 맞나요?

 

흠, 문제가 있습니다. 백테스트 는 마이너스 이익에 있는 주문을 마감하지 않습니다. 테스트가 끝나면 이익이 -230인 미결 주문이 있습니다.

 

정수 시작()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE );

}

}

}

작동하지 않습니다.

 
arroganzmaschine:
정수 시작()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

}

작동하지 않습니다.

OrderSelect()를 잊어버렸습니다(어떤 작업을 수행하기 전에 항상 주문을 선택해야 합니다). 또한 마감하려는 주문 유형 을 확인하는 부분을 추가하는 것이 좋습니다.

이 같은 :

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)

{

if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);

}

 

누군가 히스토그램을 TrendHistogram 표시기에서 막대로 변환하는 데 도움을 줄 수 있습니까? 첨부된 TrendFilter 표시기의 막대와 동일한 막대를 얻고 싶습니다.

TrendHistogram이 올바르게 작동하려면 EMA_Adaptive 표시기가 필요합니다.

 
freakout:
누군가 히스토그램을 TrendHistogram 표시기에서 막대로 변환하는 데 도움을 줄 수 있습니까? 첨부된 TrendFilter 표시기의 막대와 동일한 막대를 얻고 싶습니다. TrendHistogram이 올바르게 작동하려면 EMA_Adaptive 표시기가 필요합니다.

기절

여기 당신이 간다

DrawAsBars를 true로 설정하면 설명한 대로 그려집니다. 해당 매개변수 를 false로 두면 원래대로 작동합니다.

파일:
 

안녕,

누구든지 이 코드를 편집하도록 도와줄 수 있습니까? 백 테스팅은 좋지만 EA는 데모/ 실제 계정 에서 작동하지 않습니다.

//+----------------------------------------------- -------------------+

//| Hans123Trader v1 |

//+----------------------------------------------- -------------------+

#포함하다

#재산권 "hans123"

#속성 링크 ""

// 후키나가시에 의해 프로그래밍됨

외부 int BeginSession1=6; (백테스트하는 동안 모든 세션에 대해 0을 편집하고 설정하여 궁극적인 결과를 얻었습니다)

외부 정수 EndSession1=10;

외부 int BeginSession2=10;

외부 int EndSession2=14;

외부 이중 TrailingStop = 0;

외부 이중 TakeProfit = 452;

외부 이중 InitialStopLoss=40;

이중 로트 = 0.1;

날짜 시간 막대 시간 = 0;

이중 미끄러짐=3;

//+----------------------------------------------- -------------------+

//| |

//+----------------------------------------------- -------------------+

정수 시작()

{

int cnt, 티켓, 오류, i, j, cmd;

정수 매직넘버;

더블 ts, tp, LowestPrice, HighestPrice, Price;

bool 순서[5];

문자열 설정;

날짜/시간 유효성=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_" + 기호();

if (bartime == 시간[0]) {

리턴(0);

} 또 다른 {

바타임 = 시간[0];

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

///////////////// 오픈 주문 수정 ///////////////////////////// //////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {

if(TimeDay(OrderOpenTime())!=TimeDay(시간[0])) {

인쇄(".");

OrderClose(OrderTicket(), 로트, 입찰, 3, 빨간색);

if (err>1) { Print("구매 주문 마감 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} 그렇지 않으면 { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;

} 그렇지 않으면 { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,흰색);

if (err>1) { Print("구매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Bid-Point*TrailingStop;

if (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,흰색);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {

if(TimeDay(OrderOpenTime())!=TimeDay(시간[0])) {

인쇄(".");

OrderClose(OrderTicket(), 랏, 물어보기, 3, 빨간색);

if (err>1) { Print("판매 주문 마감 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} 그렇지 않으면 { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;

} 그렇지 않으면 { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,흰색);

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = 묻고+점*후행중지;

if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,흰색);

}

}

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

///////////////// 설정 순서 //////////////////////////////// ////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

if(AccountFreeMargin()<(1000*Lots)) return(0);

Validity=StrToTime(TimeYear(시간[0]) + "." + TimeMonth(시간[0]) + "." + TimeDay(시간[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {

LowestPrice=낮음[최저(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=높음;

//// Bid/Ask에 너무 가까운 BUYSTOP/SELLSTOP 가격을 피하기 위해 다음이 필요합니다.

//// 이 경우 130개의 잘못된 중지가 발생합니다.

//// 적절한 OP_BUY, OP_SELL로 변경을 시도했지만 만족스럽지 못한 결과

//if (HighestPrice+5*Point<Ask+Spread*Point) {

// cmd=OP_BUY;

// 가격=묻다;

//} 또 다른 {

cmd=OP_BUYSTOP;

가격=최고가+5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (LowestPrice-5*Point>Bid-Spread*Point) {

// cmd=OP_SELL;

// 가격=입찰가;

//} 또 다른 {

cmd=OP_SELLSTOP;

가격=최저가격-5*포인트;

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {

LowestPrice=낮음[최저(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=높음;

//if (HighestPrice+5*Point<Ask+Spread*Point) {

// cmd=OP_BUY;

// 가격=묻다;

//} 또 다른 {

cmd=OP_BUYSTOP;

가격=최고가+5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (LowestPrice-5*Point>Bid-Spread*Point) {

// cmd=OP_SELL;

// 가격=입찰가;

//} 또 다른 {

cmd=OP_SELLSTOP;

가격=최저가격-5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

////////////////// 다양한 서브루틴 /////////////////////////////// /////////////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

int func_Symbol2Val(문자열 기호) {

if(symbol=="AUDUSD") { 반환(01);

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} else if(symbol=="EURCAD") { 반환(11);

} else if(symbol=="EURCHF") { 반환(12);

} else if(symbol=="EURGBP") { 반환(13);

} else if(symbol=="EURJPY") { 반환(14);

} else if(symbol=="EURUSDm") { 반환(15);

} else if(symbol=="GBPCHF") { return(20);

} else if(symbol=="GBPJPY") { return(21);

} else if(symbol=="GBPUSD") { return(22);

} else if(symbol=="USDCAD") { 반환(40);

} else if(symbol=="USDCHF") { 반환(41);

} else if(symbol=="USDJPY") { return(42);

} else if(symbol=="GOLD") { return(90);

} else { Comment("예기치 않은 기호"); 리턴(0);

}

}

int OrderSendExtended(문자열 기호, int cmd, 이중 볼륨, 이중 가격, int 미끄러짐, 이중 손절매, 이중 이익 실현, 문자열 주석, int magic, datetime 만료=0, color arrow_color=CLR_NONE) {

날짜 시간 OldCurTime;

정수 시간 초과 = 30;

인트 티켓;

OldCurTime=CurTime();

동안 (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {

if(OldCurTime+timeout<=CurTime()) {

Print("OrderSendExtended() 오류: 시간 초과가 발생했습니다.");

리턴(0);

}

수면(1000);

}

GlobalVariableSet("InTrade", CurTime()); // 잠금 표시기 설정

티켓 = OrderSend(기호, cmd, 볼륨, 가격, 슬리피지, 손절매, 이익실현, 댓글, 매직, 만료, arrow_color);

GlobalVariableDel("인트레이드"); // 잠금 표시기 지우기

반환(티켓);

}

 
ccd:
안녕,

누구든지 이 코드를 편집하도록 도와줄 수 있습니까? 백 테스팅은 좋지만 EA는 데모/실제 계정에서 작동하지 않습니다.

//+----------------------------------------------- -------------------+

//| Hans123Trader v1 |

//+----------------------------------------------- -------------------+

#포함하다

#재산권 "hans123"

#속성 링크 ""

// 후키나가시에 의해 프로그래밍됨

외부 int BeginSession1=6; (백테스트하는 동안 모든 세션에 대해 0을 편집하고 설정하여 궁극적인 결과를 얻었습니다)

외부 정수 EndSession1=10;

외부 int BeginSession2=10;

외부 int EndSession2=14;

외부 이중 TrailingStop = 0;

외부 이중 TakeProfit = 452;

외부 이중 InitialStopLoss=40;

이중 로트 = 0.1;

날짜 시간 막대 시간 = 0;

이중 미끄러짐=3;

//+----------------------------------------------- -------------------+

//| |

//+----------------------------------------------- -------------------+

정수 시작()

{

int cnt, 티켓, 오류, i, j, cmd;

정수 매직넘버;

더블 ts, tp, LowestPrice, HighestPrice, Price;

bool 순서[5];

문자열 설정;

날짜/시간 유효성=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_" + 기호();

if (bartime == 시간[0]) {

리턴(0);

} 또 다른 {

bartime = 시간[0];

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

///////////////// 오픈 주문 수정 ///////////////////////////// //////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {

if(TimeDay(OrderOpenTime())!=TimeDay(시간[0])) {

인쇄(".");

OrderClose(OrderTicket(), 로트, 입찰, 3, 빨간색);

if (err>1) { Print("구매 주문 마감 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} 그렇지 않으면 { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;

} 그렇지 않으면 { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,흰색);

if (err>1) { Print("구매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = Bid-Point*TrailingStop;

if (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,흰색);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {

if(TimeDay(OrderOpenTime())!=TimeDay(시간[0])) {

인쇄(".");

OrderClose(OrderTicket(), 랏, 물어보기, 3, 빨간색);

if (err>1) { Print("판매 주문 마감 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (OrderStopLoss()==0) {

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} 그렇지 않으면 { tp=0; }

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;

} 그렇지 않으면 { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,흰색);

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

} else if (TrailingStop>0) {

ts = 묻고+점*후행중지;

if (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,흰색);

}

}

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

///////////////// 설정 순서 //////////////////////////////// ////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

if(AccountFreeMargin()<(1000*Lots)) return(0);

Validity=StrToTime(TimeYear(시간[0]) + "." + TimeMonth(시간[0]) + "." + TimeDay(시간[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {

LowestPrice=낮음[최저(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=높음;

//// Bid/Ask에 너무 가까운 BUYSTOP/SELLSTOP 가격을 피하기 위해 다음이 필요합니다.

//// 이 경우 130개의 잘못된 중지가 발생합니다.

//// 적절한 OP_BUY, OP_SELL로 변경을 시도했지만 만족스럽지 못한 결과

//if (HighestPrice+5*Point<Ask+Spread*Point) {

// cmd=OP_BUY;

// 가격=묻다;

//} 또 다른 {

cmd=OP_BUYSTOP;

가격=최고가+5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (LowestPrice-5*Point>Bid-Spread*Point) {

// cmd=OP_SELL;

// 가격=입찰가;

//} 또 다른 {

cmd=OP_SELLSTOP;

가격=최저가격-5*포인트;

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {

LowestPrice=낮음[최저(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=높음;

//if (HighestPrice+5*Point<Ask+Spread*Point) {

// cmd=OP_BUY;

// 가격=묻다;

//} 또 다른 {

cmd=OP_BUYSTOP;

가격=최고가+5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

//if (LowestPrice-5*Point>Bid-Spread*Point) {

// cmd=OP_SELL;

// 가격=입찰가;

//} 또 다른 {

cmd=OP_SELLSTOP;

가격=최저가격-5*포인트;

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

오류 = GetLastError();

if (err>1) { Print("판매 주문 수정 오류 [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }

}

}

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

////////////////// 다양한 서브루틴 /////////////////////////////// /////////////////////////////////////////////////

////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //////////////////

int func_Symbol2Val(문자열 기호) {

if(symbol=="AUDUSD") { 반환(01);

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} else if(symbol=="EURCAD") { 반환(11);

} else if(symbol=="EURCHF") { 반환(12);

} else if(symbol=="EURGBP") { 반환(13);

} else if(symbol=="EURJPY") { 반환(14);

} else if(symbol=="EURUSDm") { 반환(15);

} else if(symbol=="GBPCHF") { return(20);

} else if(symbol=="GBPJPY") { return(21);

} else if(symbol=="GBPUSD") { return(22);

} else if(symbol=="USDCAD") { 반환(40);

} else if(symbol=="USDCHF") { 반환(41);

} else if(symbol=="USDJPY") { return(42);

} else if(symbol=="GOLD") { return(90);

} else { Comment("예기치 않은 기호"); 리턴(0);

}

}

int OrderSendExtended(문자열 기호, int cmd, 이중 볼륨, 이중 가격, int 미끄러짐, 이중 손절매, 이중 이익 실현, 문자열 주석, int magic, datetime 만료=0, color arrow_color=CLR_NONE) {

날짜 시간 OldCurTime;

정수 시간 초과 = 30;

인트 티켓;

OldCurTime=CurTime();

동안 (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {

if(OldCurTime+timeout<=CurTime()) {

Print("OrderSendExtended() 오류: 시간 초과가 발생했습니다.");

리턴(0);

}

수면(1000);

}

GlobalVariableSet("InTrade", CurTime()); // 잠금 표시기 설정

티켓 = OrderSend(기호, cmd, 볼륨, 가격, 슬리피지, 손절매, 이익실현, 댓글, 매직, 만료, arrow_color);

GlobalVariableDel("인트레이드"); // 잠금 표시기 지우기

반환(티켓);

}

실제 계정에서 InitialStopLoss에 10을 곱해 보십시오. EA는 4자리 중개인을 위해 작성되었습니다.

__________________________

추신 : 또한 TakeProfit에 10을 곱하여 일관성을 유지하고 핍으로 표시해야 하지만 해당 숫자로 테스트하면 백 테스트와 동일한 결과를 얻지 못할 것입니다(단순히 백 테스트를 통해 값을 사용할 수 있었기 때문입니다. 데모 계정 이나 라이브 계정에서 허용하지 않는 두 가지 경우)

 
mladen:
zigflip "마지막 위/아래 psar 쌍" 또는 "마지막 2개 막대"와 같은 마지막 두 개의 psar?

답변이 늦어서 죄송합니다 mladen, 이메일 구독이 있는 줄 알았는데...

내 말은 psars의 마지막 쌍을 의미합니다!

나는 주로 마지막 psar를 모니터링하고 싶지만 상한/하한 변경이 발생하면 마지막 두 수준이 필요합니다. 흠 아마도 뒤로 x바가 되어야 합니다... 아, 지금 말씀하신 내용을 알 수 있습니다. 그것은 첫 번째 새로운 방향 psar의 도착에 마지막 전환으로 트리밍됩니다!

도움을 주셔서 감사합니다.