포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1069

 
CloseAllBuy()는 한 곳에서 호출됩니다. OnTick() 함수에서 if(Bid>buycloseprice) CloseAllBuy(); 그리고 이 상태는 EA를 다시 켤 때도 오지 않았고, 종료 기간에도 오지 않았고, Expert Advisor를 다시 켰을 때도 CloseAllBuy() 함수가 계속 작동했습니다.
 
rapid_minus :
CloseAllBuy()는 한 곳에서 호출됩니다. OnTick() 함수에서 if(Bid>buycloseprice) CloseAllBuy(); 그리고 이 상태는 EA를 다시 켤 때도 오지 않았고, 종료 기간에도 오지 않았고, Expert Advisor를 다시 켰을 때도 CloseAllBuy() 함수가 계속 작동했습니다.
코드가 있을까요? Buycloseprice가 누구인지, 어디서 났는지, 어떻게 초기화되었는지, 어디에서 변경되었는지, 여기에서 명확하지 않습니다.
 
다음은 코드입니다.
 
어떤 이유로 SRC가 삽입되었는지 확인할 수 없습니다. 그렇지 않은 경우 알려주시면 반복하겠습니다.
 
문제: 이 경우 전역 변수 를 적용하는 방법을 구체적으로 알려주세요. 나는 전혀 생각하지 않는다. 고맙습니다.
 
rapid_minus :
다음은 코드입니다.

볼 수 없다

Rapid_마이너스 :
문제:   이 경우 전역 변수를 구체적으로 적용하는 방법을 알려주시겠습니까? 나는 전혀 생각하지 않는다. 고맙습니다.

문서 읽기   터미널의 전역 변수 , 메타에디터의 도움을 보면 거기에서 더 빨리 업데이트됩니다.

또는 중요한 변수의 설정과 값을 파일에 덤프한 다음 로드할 때 거기에서 읽을 수 있습니다.

그리고 대부분의 경우 이 모든 것 없이도 할 수 있습니다. 머리를 조금 깨고 코드에서 올바른 논리를 만드십시오.

 
나는 다음과 같은 텍스트를 반복한다: RefreshRates();
총계=주문총계();
if(총>0)
{
for(int i=0; i<=OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==매직)
{ 새로고침률();
if(Bid>buycloseprice) CloseAllBuy();
}

if(OrderType()==OP_SELL && OrderMagicNumber()==매직)
{ 새로고침률();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}

if((총==0) || (총>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!=Symbol()))
{
Comment(" 열린 자리 가 없습니다. ");

if(조건 && timeBar!=iTime(Symbol(),Period(),1))
{
Print("BY에 대한 기준-1이 나타남");
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
수면(1000);
새로 고침();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
수면(1000);
새로 고침();
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
수면(1000);
새로 고침();
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
수면(1000);
새로 고침();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Period(),1);
이중 스프레드 = (매도호가);
구매오픈타임 = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);
Comment("매직 510015 구매");
Print("종가 = ",매매가);
}
}

}

//+----------------------------------------------- --------------------+*/
CloseAllBuy() 무효화
{
부울 fc;
(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if (주문유형()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
구매 마감 가격 = 0.0;
tc=주문닫기시간();
}
}
}
 
그렇다면 코드에서 내 오류는 어디에 있습니까?
 
rapid_minus :
나는 텍스트에서 반복합니다.

Buycloseprice 가 어디에서 왔는지, 조건 이전에 어떻게 되는지 명확하지 않습니다. if(Bid>buycloseprice) CloseAllBuy(); . 코드에서 이것만 보았기 때문에 - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits); 하지만 이 buycloseprice 는 어디에 선언되고 어떤 값이 초기화되었는지 ?


이것이 구매 주문 의 예상 종가 인 경우 값이 작동한 후 변수로 전송되고 표시되지 않기 전에 변수에 포함된 내용이 있기 때문에 논리가 이미 중단됩니다.

이제 약간의 산술적으로 코드에 다음과 같은 주기가 있습니다.

for(int i=0; i<=OrdersTotal(); i++)

0에서 4까지 5개의 주문이 있다고 가정해 보겠습니다. 그리고 주기는 0에서 5까지 계산됩니다. 이 주기가 올바르게 작동할까요?

또한 if(condition && timeBar!=iTime(Symbol(),Period(),1)) 행 에서 조건timeBar는 어디에서 왔 습니까?

 
이해했다고 생각합니다. 실수는 global buycloseprice를 설정하고 즉시 값을 0.0으로 지정하는 것입니다. 그리고 나중에 위치를 열 때 특정 값을 취하지만 터미널이 꺼지면 이 값이 사라지고 켜면 원래 값, 즉 0.0이고 이에 따라 if(Bid>buycloseprice) 조건이 관찰되고 종료 명령이 전송됩니다. 하지만 이 변수를 전역 터미널로 옮기는 방법을 모르겠습니다.