[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 1121

 

좋은 오후/밤

나는 작동하지 않는 원시적인 방식으로 거래를 되돌리려고 노력하고 있습니다(EA의 계산은 틱으로 진행됨).

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // 매수 주문이 있었는지 확인 && 캔들이 낮은 수준 아래에서 마감된 경우

{

CheckForClose(); // 주문 마감

오픈셀(); // 매도 주문 열기

반품;

}

내가 뭘 잘못하고 있는지 말해줘? 나는 또한 이 격차를 메우는 데 도움이 될 링크에 대해 감사할 것입니다.

 

dzhini :

나는 작동하지 않는 원시적인 방식으로 거래를 되돌리려고 노력하고 있습니다(EA의 계산은 틱으로 진행됨).

if( CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // 구매 주문이 있었는지 확인 && 캔들이 낮은 수준 아래에서 닫혔는지 확인


이 기능에서는 아마도 모든 주문을 계산할 것입니다. 하지만 당신은 바이해야합니다
 

Time1과 Time2 사이에 몇 분인지 확인하는 방법은 무엇입니까?

 datetime Time_1     = D'2011.01.12 13:30' ;
datetime Time_2     = D'2011.01.05 10:30' ; 

минут = Time_1- Time_2
 
sergeev :
이 기능에서는 아마도 모든 주문을 계산할 것입니다. 하지만 당신은 바이가 필요합니다

다음은 표준 기능입니다.

int CalculateCurrentOrders(문자열 기호)
{
구매 = 0, 판매 = 0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) 구매++;
if(OrderType()==OP_SELL) 판매++;
}
}

if(매수>0) 반환(매수);
그렇지 않으면 반환(-판매);

}

>0이면 매수 주문 , <0이면 매도 주문)))

 
Eliza :

Time1과 Time2 사이에 몇 분인지 확인하는 방법은 무엇입니까?

차이는 초 수를 반환합니다.

60으로 나눕니다. 분 수를 구하십시오.

 
거래를 반대로 합니다. 고문의 구조가 변경됨 - 기능이 제거되었습니다. 특정 조건에서 하나의 양초를 닫고 여는 방법.

외부 이중 TP = 70; // 이익을 취하다
외부 이중 SL = 0; //스톱로스
외부 이중 로트 = 0.1;

더블 하이레벨;
더블 로우레벨;
인트레스바이=0;
인트레스셀=0;


//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
HighLevel=높음[1];
LowLevel=낮음[1];
반품;
}

//+----------------------------------------------- --------------------+
//| 전문가 기능 |
//+----------------------------------------------- --------------------+

무효 시작()
{

if(Bars<100 && IsTradeAllowed()==false) 반환;


if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=닫기[1];
반품;
}

if(resBuy==0 && resSell==0 && CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=고수준;
HighLevel=닫기[1];
반품;
}

if(resBuy!=0 && resSell==0 && 닫기[1]<LowLevel) //----------------------------- --------이 부분이 흥미롭습니다: 같은 막대에서 닫기와 열기
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=닫기[1];
반품;
}

if(resSell!=0 && resBuy==0 && 닫기[1]>HighLevel) //---------------------------------------- ------ --이 부분이 흥미롭습니다: 같은 막대에서 닫기와 열기
{
bool closeSell=OrderClose(재판매, 로트, 매도, 0.0002, 레드);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=고수준;
HighLevel=닫기[1];
반품;
}

}

//------------------------------------------------ ------------------ Low&High 브레이크 확인(Func)

이중 CheckBreak()
{
양초=열기[1]-닫기[1];

if(촛불>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
 
sergeev :

차이는 초 수를 반환합니다.

60으로 나눕니다. 분 수를 구하십시오.

그것은 단지 나를 위해 날짜 1971.03.04 12:00을 표시합니다. 아마도 변환해야 합니까?

 extern datetime Time_1     = D'2011.01.12 13:30' ; 
extern datetime Time_2     = D'2011.01.05 10:30' ; 

bool    Commentari      = true;

int start()
  {

if (Commentari){
 Comment (
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/ 60 ), " минут" ,
      
         "\n==============================" );}
   return ( 0 );
  }
 
Eliza :

그것은 나를 위해 날짜를 표시합니다. 아마도 변환해야합니까?

첫 번째 - 왜 60을 곱합니까?

두 번째 - 화면에 분 수를 00:15와 같은 시간으로 표시하려면
60으로 나누거나 곱할 필요가 없습니다.

 
sergeev :

첫 번째 - 왜 60을 곱합니까?

두 번째 - 화면에 분 수를 00:15와 같은 시간으로 표시하려면
60으로 나누거나 곱할 필요가 없습니다.

네 나눗셈으로 수정했는데 연도가 1970.01.01 02:51 나오네요

나는 화면에 그것을 필요로하지 않습니다. 나는 단지이 기간 동안 날짜없이 분 수를 찾고 싶었습니다 ....

나누지 않아도 여전히 날짜가 표시되는지, 아니면 여전히 기능이 반발되는 날짜를 빼야합니까?

  • datetime 은 1970년 1월 1일 0000부터 경과한 초 수를 포함하는 부호 없는 정수인 날짜 및 시간입니다.
  •  extern datetime Time_1     = D'2011.01.12 13:30' ; 
    extern datetime Time_2     = D'2011.01.05 10:30' ; 
    
    datetime me_2     = D'1970.01.01 00:00' ; 
    
    bool    Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment (
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2)), " минут" ,
          
             "\n==============================" );}
       return ( 0 );
      }

  • 날짜 1970.01.01 02:51을 빼면 유효하지 않은 시간이 표시됩니다. 예를 들어 이 기간에 25000분이 있는 경우 이 기간에서 분 수를 구하면 됩니다. 그림 25000 ... 그런 것 (
  • 아니면 언어 µl로 얻을 수 없습니까?
 

분 수만 필요하다면 TimeToStr 을 사용할 이유가 전혀 없습니다.

시간은 일반적인 int 숫자입니다.

또는 옵션으로 - TIME_MINUTE 플래그와 함께만 TimeToStr 을 사용하십시오.