코딩 도움말..경보 대신 필터링할 지표를 얻으려면 어떻게 해야 합니까? - 페이지 6

 
elihayun:
지금까지 나는 어떤 문제도 보지 못했다(코드 지향)

그러나 논리적으로 이것을 보라.

if(isCrossed == 1 && 묻기 < upLevel)

당신은 그들이 가까이 있는지 확인하지 않고 가격이 라인보다 낮은 지 확인합니다.

그것이 내가 원했던 것입니다...필터링하고...거래를 금지하는 방법으로 라인을 사용하고 싶습니다. 그것이 의도였습니다. 선 자체의 너비를 변경할 수 있으면 선에 가까운지 확인할 방법을 만들 필요가 없습니다. 선 자체를 제한기로 사용할 수 있습니다. 밴드의 너비를 변경하면 라인에 얼마나 가까워졌는지 확인하는 또 다른 요소가 있는 것처럼 동일합니다. 이것을 입력하는 조건으로 만듦으로써 최고선 아래에 있지 않는 한 구매 주문이 열리지 않도록 필터링하거나 중지해야 하며, 최저선 위에 있으면 판매 주문이 열리지 않도록 해야 합니다.

왜 이렇게 하면 주문 오류가 발생하는지 혼란스럽습니다.

 

오류는 MM 매개변수 와 관련된 부적절한 로트 크기로 인한 것 같습니다...

초점을 약간 변경하고... 원래 초점으로 돌아갑니다.

나는 추세 밴드 표시기가 내가 원하는 종류의 필터링 효과를 생성하지 않을 것이라고 결론지었습니다. 그냥 하지 않습니다.

원래 'ang_AutoCh_HL-v1' 채널 표시기를 보고 있었습니다. 나는 그것이 내가 원하는 필터 효과를 줄 것이라는 것을 알 수 있지만 호출 할 버퍼가 없습니다 ... 그래서 .....

버퍼를 만들 수 있습니까? 라인 값을 위해? 개체 1과 개체 2의? EA에서 지지와 저항으로 사용할 수 있습니까?

여기 지표가...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

return(0);}

//*******************************

int deinit() {

ObjectDelete("1"+sName);

ObjectDelete("0"+sName);

ObjectDelete("2"+sName); }

//*******************************

int start() {

int i,n;

//------------------------------------------------------------------------------

if (f==1) {

p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));

p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));

p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));

if (fp==0 && p!=p1) {p=p1; fp=1;}

if (fp==0 && p!=p0) {p=p0; fp=1;}

if (fp==0 && p!=p2) {p=p2; fp=1;}

}

//====================================================

sx=0; sy=0; sxy=0; sx2=0;

for (n=0; n<=p; n++) {sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);}

aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);

//----------------------------------------------------

for (i=0; i<=p; i++) {

lr=bb+aa*i;

dh=High-lr; dl=Low-lr;

//----------------------------------------------------

if (i<p/2) {if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}

if (dh>=dh_1) {dh_1=dh; ai_1=i;}

if (dl<=dl_1) {dl_1=dl; bi_1=i;}}

//----------------------------------------------------

if (i>=p/2) {if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}

if (dh>=dh_2) {dh_2=dh; ai_2=i;}

if (dl<=dl_2) {dl_2=dl; bi_2=i;}}}

//-------------------------------------

lr0=bb; lrp=bb+aa*(i+p);

//===================================================

if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;

if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;

if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {if (MathAbs(dh_1-dh_2)=MathAbs(dl_1-dl_2)) f=2;}

//=================================================

if (f==1) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

if (i==0 || i==p/2) dhm=0.0;

if (High-hai>dhm && i<p/2) {ai_1=i; f1=1;}

if (High-hai>dhm && i>=p/2) {ai_2=i; f1=1;} }

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);

dli=Low-hai;

if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;}

ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);

hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);

//----------------------------

price_p1=hap;

price_p0=hap+dlm/2;

price_p2=hap+dlm;

price_01=ha0;

price_00=ha0+dlm/2;

price_02=ha0+dlm;

}

//=================================================

if (f==2) {

for (n=0; n<=20; n++) { f1=0;

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

if (i==0 || i==p/2) dlm=0.0;

if (Low-lai<dlm && i<p/2) {bi_1=i; f1=1;}

if (Low-lai=p/2) {bi_2=i; f1=1;}}

if (f==0) break;}

//----------------------------

for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);

dhi=High-lai;

if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;}

la0=Low*(0-bi_2)/(bi_1-bi_2)+Low*(0-bi_1)/(bi_2-bi_1);

lap=Low*(p-bi_2)/(bi_1-bi_2)+Low*(p-bi_1)/(bi_2-bi_1);

//----------------------------------------------------------------

price_p1=lap;

price_p0=lap+dhm/2;

price_p2=lap+dhm;

price_01=la0;

price_00=la0+dhm/2;

price_02=la0+dhm;

}

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//-----------------------------------------------------------------

ObjectSet("1"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_COLOR,col);

ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);

ObjectSet("2"+sName,OBJPROP_COLOR,col);

//---------------------------------------------

ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);

ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);

ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);

ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);

ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);

ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);

ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);

ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);

//==================================================================

f=1; p1=p; p0=p; p2=p; fp=0;

//*************************************************************************************

return(0);}

//=====================================================================================[/PHP]

here is what I'm trying to add a buffer so I can extract the values I need...

#property copyright "ANG3110@latchess.com"

//----------------------------------

#property indicator_chart_window

//----------------------------------

extern int Hours=24;

extern color col=SkyBlue;

//------------------

double ExtBufferResistance[];

double ExtBufferMiddle[];

double ExtBufferSupport[];

double lr,lr0,lrp;

double sx,sy,sxy,sx2,aa,bb;

int p,sName,fs;

int f,f0,f1;

double dh,dl,dh_1,dl_1,dh_2,dl_2;

int ai_1,ai_2,bi_1,bi_2;

double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;

double price_p1,price_p0,price_p2,price_01,price_00,price_02;

int p1,p0,p2,fp;

//*****************************************

int init() {

p=Hours*60/Period();

if (fs==0) {sName=CurTime(); fs=1;}

SetIndexBuffer (4, ExtBufferResistance); //--resistance line

SetIndexBuffer (5, ExtBufferMiddle); //--middle line

SetIndexBuffer (6, ExtBufferSupport); //--support line

return(0);}

//*******************************

//===================================================================================

ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);

ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);

ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);

//------------------make indicator buffer for EA-------------------------------------

somehow get object 1 to put it's value into buffer 4

somehow get object 0 to put it's value into buffer 5

somehow get object 2 to put it's value into buffer 6

//------------------------draw chart-------------------------------------------------

[/php]

and then upgrade this EA....

[PHP]#property copyright "Copyright 2005, Chris Battles."

#property link "cbattles@neo.rr.com"

extern double TrailingStop = 5;

extern double TrailingStopTrigger = 19;

extern double StopLoss = 186;

extern double TakeProfit = 250;

extern double Lots = 0.4;

//---- ang_AutoCh_HL-v1 and Filter Parameters

extern int Hours=24;

extern color col=SkyBlue;

extern double TF = 30; //--which bar period for the custom indicator to use

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

//| |

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

int start(){

int cnt, ticket;

if(Bars<100){

Print("bars less than 100");

return(0);

}

double ema1a=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);

double ema2a=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0);

double ema3a=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

double ema1b=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);

double ema2b=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);

double ema3b=iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,1);

//----------channel filter

double resistance = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 4, 0);

double support = iCustom(NULL,TF, "ang_AutoCh_HL-v1", Hours, col, 6, 0);

//--- end channel filter

and then make the order logic have second condition for entry...

[PHP]if (ema3bema1a && Ask < resistance){

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point, NULL,16384,0,Green);

if(ticket>0){

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if (ema3b>ema1b && ema3a support){

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point, NULL,16384,0,Red);

if(ticket>0) {

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

정말 내 문제는 표시기에서 값을 가져와서 EA가 사용할 수 있도록 하는 것입니다... 표시기에서 EA로 값을 가져오는 방법을 알려주시면 나머지는 관리할 수 있을 것 같습니다.

 

버퍼로 무엇을 하고 있는지 잘 모르겠습니다. 나는 setbuffer 라인을 던지고 그것이 필요한지 또는 무엇인지조차 모릅니다.

 
raff1410:
안녕...

버퍼가 있는 표시기,

아래와 같이 res && sup를 호출할 수 있습니다.

이중 저항 = iCustom(NULL,TF,"채널",24,col,0,0);

이중 지원 = iCustom(NULL,TF,"채널",24,col,2,0);

라프

어머 봐!! 그것이 내가 말하는 한판 승부입니다....이것이 작동하는지 확인하기 위해 시도하기를 거의 기다릴 수 없습니다.

이제 이 물건을 ea 상단에 올려야 합니까? 표시기에 어떤 설정을 사용하는지 알려주려면?

//---- 채널 및 필터 매개변수

extern int 시간=24;

extern color col=하늘색;

외부 이중 TF = 30; //-- 사용자 지정 표시기 가 사용할 막대 기간

그리고...

이중 저항 = iCustom(NULL,TF,"채널",시간,열,0,0);

이중 지원 = iCustom(NULL,TF,"채널",시간,열,2,0);

 

좋아, 이 오류 130이 다시 나타납니다. 그게 또 뭐죠?

오 예 손절매 너무 가깝습니다 .. 알았어 ...

 

안녕...

버퍼가 있는 표시기,

채널.mq4

아래와 같이 res && sup를 호출할 수 있습니다.

이중 저항 = iCustom(NULL,TF,"채널",24,col,0,0);

이중 지원 = iCustom(NULL,TF,"채널",24,col,2,0);

라프

파일:
channel.mq4  6 kb
 

새로운 문제...

나는 이것에 대해 여러 가지 버전의 스톱이 작동하고 있습니다...드로다운은 후행 스톱 트리거가 작동하지 않아 발생합니다. 참여하지 않으면 폴백 '주식 스톱'이 포지션을 마감하고 그것이 상처를 주는 것입니다...

나는 많은 작은 드로다운에서 후행 정지가 발동될 때 계정에 거의 많은 자산 피해를 입히지 않는다는 것을 알 수 있습니다. 그것은 그러한 종류의 많은 손실을 견디고 만회할 수 있지만 주식이 마감되는 더 큰 손실을 극복할 수는 없습니다.

그래서....

오픈 뒤의 바가 트레일링 스톱에 맞물릴 만큼 충분히 움직이지 않으면 포지션을 닫을 수 있는 방법이 있습니까?

이동 평균선 에서 현재 기간과 이전 세 기간을 호출하여 이에 대한 설명을 시작했습니다. 기본적으로 내 생각은 신호와 하나의 막대 확인이 현재 이전의 세 기간에서 벗어날 수 있고 현재 기간을 사용하여 이제 후행 정지를 트리거할 만큼 충분히 이동했는지 확인할 수 있다는 것입니다. 이 조건을 || 또는 모든 미결 주문을 마감하는 에퀴티 스탑에 대한 조건.

나를 당황하게 만든 것은 후행 정지 방아쇠를 걸 수 있을 만큼 충분히 이동했는지 여부는 그것이 길어지면 위로 움직여야 하지만 짧으면 아래로 움직여야 하는지에 달려 있다는 것입니다. 따라서 트레일링 스톱 트리거 감지는 트리거로 이동하는 방향을 알기 위해 롱 포지션인지 숏 포지션인지에 주의를 기울여야 합니다. 그것을 감지하는 방법을 모르겠습니다.

큰 손실이 작은 것보다 크지 않은 이 보고서를 상상할 수 있으며, 그렇다면 수익성이 있을 것입니다.

파일:
whatever2.htm  292 kb
whatever2.gif  6 kb
 

한 번 더 수정이 필요합니다...

이것은 손실이 커지기 전에 손실 위치를 닫는 것입니다...또한 커지기 전에 승리 위치를 닫는 것입니다.

그것은 후행 정지를 트리거하기 위해 처음 10분 동안 충분히 움직이지 않은 경우에만 위치를 닫는 데 필요한 작업입니다... 그렇게 하려면 1핍만 움직여야 한다고 생각합니다... 그래서 묻지 않습니다 처음 10분 동안. 정말 나는 그것이 꼬리를 돌리지 않고 열린 직후 위치로 돌아 가지 않는지 확인하고 싶습니다. 지는 놈들이야....

그래서 .... 후행 정지가 트리거되었는지 감지하고 실행되도록 할 수 있다면!! 후행 정지가 시간의 함수 로 닫히지 않고 닫히도록 하십시오. 마감 시간 매개변수는 기본 마감 전략이 아니며 후행 중지가 인계될 때까지 마감을 처리하기 위한 것입니다.

파일:
whatever3.htm  304 kb
whatever3.gif  6 kb
 

이건 내가 의도한대로 되지 않는다...이런 결과가 이해가 안가네..

https://c.mql5.com/forextsd/forum/9/whatever3.htm

그냥 살펴보기만 해도 대부분의 모든 것이 10분 이내로 열려 있습니다(기준이 충족되지 않으면 10분 안에 닫히도록 설정했습니다). 주문 #52는 19분이고 #48은 15분입니다. 분

이 부분이 작동하지 않습니다... OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice()

이것도 작동하지 않습니다... if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

우리가 확인해야 할 것은 후행 정지가 트리거되었는지 여부입니다. 나는 이것을 가격에 근거하여 닫는 것을 원하지 않는다. 트리거되지 않는 후행 정지를 기반으로 이것을 닫고 싶습니다. 나는 원래 후행 정지를 트리거하기에 충분했는지 확인하기 위해 확인해야 한다고 말했음을 깨달았습니다. 하지만 후행 정지 트리거 코드 또는 그것이 얼마나 멀리 있는지 완전히 이해하지 못합니다...모르겠습니다 지정된 간격 후에도 확인을 위해 이것이 계속 반복되는지 확인하고 입찰가+이익의 기준이 OrderOpenPrice인 경우 15분 또는 19분에 닫을 것인지 알 수 있습니까? 이것이하는 일은 후행 정지가 트리거 될 때까지 정지 간격 기준 대신 지배적 인 닫기 기준을 만드는 것입니다.

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

void CloseOrder()

{

double Profit=ThresholdMove*Point;

int total = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if ((CurTime()-OrderOpenTime())>MonitorInMinutes*60*MinsMultiplier)

{

if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-Profit<OrderOpenPrice() )

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

}

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

}

}

}

}

//+------------------------------------------------------------------+[/PHP]

Somewhere in this closing strategy there must be a way to detect if it's been triggered or not...

[PHP]//+------------------------------------------------------------------+

//| Variable End |

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

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 == CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

if (CloseSell1_1 == CloseSell1_2) Order = SIGNAL_CLOSESELL;

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(TrailingStopMode && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

결론적으로 시간 마감 매개변수는 의도한 대로 수행하도록 수정할 수 없다면 너무 공격적입니다.

 

죄송합니다. 전체 코드를 검토할 시간이 없지만 이 스니펫을 살펴보겠습니다.

if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && Bid+Profit>OrderOpenPrice())

OrderOpenPrice = 1.2100이라고 가정해 보겠습니다.

이익은 0.0010입니다.

따라서 입찰가가 1.2100-0.0010 = 1.2090보다 작거나 같으면 공매도 거래를 종료하려고 합니다.

하락 갭이 있었고 가격이 1.2090을 건너뛰었고 현재 입찰 가격이 1.2088이라고 가정해 보겠습니다. 당신의 공식에 따르면,

입찰가 + 이익 = 1.2088 + 0.0010 = 1.2098. 시스템이 이익 임계값을 초과하더라도 OrderOpenPrice보다 크지 않습니다. 따라서 주문이 마감되지 않습니다. 제 생각에는 마감 조건의 논리를 재평가하고 다시 작성해야 합니다. 또한 매도호가 에서만 거래를 마감 할 수 있으므로 매도 거래를 처리할 때 매도호가를 처리해야 합니다.

또 한 가지 조언을 드리자면,

for (int cnt = 0 ; cnt = 0; cnt--) 또는 이와 유사한 것의 카운트 루프.

행운을 빕니다.