오류 코드 "0"? - 페이지 2

 
DomGilberto :
오 죄송합니다 - 더 이상 오류가 발생하지 않습니다. 매수주문만 받고 매도주문은 안들어오네요...

그것은 MA 크로스 오버에 관한 나의 이전 스레드와 관련이 있습니다 - 나는 여전히 그것을 이해하지 못합니다! 그러나 나는 사람들이 나에게 답을 주는 동안 누군가를 감아 죽인 말을 치고 싶지 않습니다(비록 답을 이해하지는 못하지만)! 도움을 주신 RaptorUK를 응원합니다!

다른 사람을 위해 말할 수 없습니다, 나는 상처받지 않습니다. . .

오류가 발생하지 않고 판매 주문 이 없으면 OpenOrdersThisPair(Symbol()) 가 0 이 아닌 경우 해당 함수의 유형은 무엇입니까? int 또는 double입니까? 아니면 부울?

 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair( string pair)
{
   int total= 0 ;
       for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
         {
         OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
         if (OrderSymbol()==pair) total++;
         }
         return (total);
} 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   double ticksize = MarketInfo(Symbol(), MODE_TICKSIZE);
   if (ticksize == 0.00001 || ticksize == 0.001) // if you set this to 0 it WONT throw an order out straight away.
   pips = ticksize*10;
   else pips = ticksize;  
   

   return(0);
  }
문제가 무엇인지 실제로 이해할 수 없습니다. 나는 내 제한된 지식이 나에게 말하는 많은 방법으로 MA if 문을 작성했습니다(짧은 측면에서 작동하지 않으므로 분명히 제한됨...)

단순히 이동평균선 의 교차점이 발생하는 지점이 아니라 다른 지점에서 주문이 내려지기 때문이라고 생각합니다.
 
//+----------------------------------------------------------------------------------------------------------------------------------------+   
//| Function that checks for an MA Cross                                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   
  

void CheckForMaTradeLong()
{
   
   TriggerBarTime = Time[ 1 ];
   
   for ( int i= 0 ; i < Bars ; i++)
   {
   double i1  = iMA ( NULL , 60 , 3 , 0 , 1 , 0 ,i); 
   double i2  = iMA ( NULL , 60 , 5 , 0 , 1 , 0 ,i);
   double i3  = iMA ( NULL , 60 , 8 , 0 , 1 , 0 ,i);
   double i4  = iMA ( NULL , 60 , 10 , 0 , 1 , 0 ,i);  
   double i5  = iMA ( NULL , 60 , 12 , 0 , 1 , 0 ,i);
   double i6  = iMA ( NULL , 60 , 15 , 0 , 1 , 0 ,i);  
   double i7  = iMA ( NULL , 60 , 30 , 0 , 1 , 0 ,i);
   double i8  = iMA ( NULL , 60 , 35 , 0 , 1 , 0 ,i);
   double i9  = iMA ( NULL , 60 , 40 , 0 , 1 , 0 ,i);
   double i10 = iMA ( NULL , 60 , 45 , 0 , 1 , 0 ,i);
   double i11 = iMA ( NULL , 60 , 50 , 0 , 1 , 0 ,i);
   double i12 = iMA ( NULL , 60 , 60 , 0 , 1 , 0 ,i); 
   double ema21 = iMA ( NULL , 60 , 21 , 0 , 1 , 0 ,i);   

   double TriggerBarTime = (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12); // this needs to just tell me where all the MA's fan up and nothing more...
   if (i1 > i12)
   if (TriggerBarTime == true )
       if (Low[ 1 ]<ema21 && i12<Close[ 1 ]) OrderEntry( 0 );
         if (Close[ 1 ]<i12) DeleteOrder( 0 );   
   
   break ;
   }
   return (i- 1 );
   }

나는 이것이 문제라는 것을 안다! 전에 다른 주제에 대해 질문한 적이 있다는 것을 알고 있지만 이 질문에 대한 답변에 정말 감사드립니다. 서로 어떻게 소통하는지 직접 보기 위해.. 불필요한 방법은 말할 것도 없고.. 무시하고..)

Q.1) "double triggerbartime" 라인과 > than 섹션에 대해.... 내가 이해하고 싶은 것은 모든 이동 평균이 이전 비교 이동 평균보다 큰 경우를 알아내기 위해 이 함수 에 어떻게 지시하는지입니다. , 그런 다음 올바른 순서로 남아 있는지 확인하는 것을 잊어 버리십시오 ... 대신 그 시점에서 내가 확인해야 할 것은 PRICE CLOSE가 "i12"(60 EMA) 이상으로 유지되는 것입니다. 그렇다면 할 수 있습니다. 다른 IF 문을 계속 진행하고 "OrderEntry(0)"를 통해 긴 주문을 버리십시오. 그렇지 않은 경우 긴 (i1>i2 && i2>i3...) 라인을 살펴보고 다음 줄을 고려하기 전에 이것이 사실이 될 때까지 기다리십시오 ...

나는 대답이 나를 똑바로 쳐다보고 있다는 것을 알고 있습니다. 조금 실망스럽고 이 작은 조각에 정말 감사할 것입니다.... 감사합니다!

 
  1. 내 게시물
     double TriggerBarTime = (i1>i2  && i2>i3   && i3>i4 && i4>i5 && 
                             i5>i6  && i6>i7   && i7>i8 && i8>i9 && 
                             i9>i10 && i10>i11 && i11>i12);
       if (TriggerBarTime == true )
    TrgggerBarTime은 어떤 데이터 유형이어야 합니까?
     double TriggerBarTime = boolean ;
       if ( double == true )

  2. TriggerBarTime에 대한 이전 막대와 orderEntry에 대한 마지막 막대를 보는 이유는 무엇입니까?
  3. 들여쓰기 수정
    내 게시물
       if (i1 > i12)
       if (TriggerBarTime == true )
           if (Low[ 1 ]<ema21 && i12<Close[ 1 ]) OrderEntry( 0 );
             if (Close[ 1 ]<i12) DeleteOrder( 0 );   
    제대로 들여쓰기. 이것이 정말로 당신이 의미 한 것입니까?
     if (i1 > i12 && TriggerBarTime && Low[ 1 ]<ema21 && i12<Close[ 1 ]){
        OrderEntry( 0 );
    }
    if (Close[ 1 ]<i12){
        DeleteOrder( 0 );
    }
    
 
//TriggerBarTime works in conjunction with:

   int iTBT= iBarShift( NULL , 60 , TriggerBarTime, true ),
        iHH= iHighest( NULL , 60 , MODE_HIGH, iTBT + 1 , 0 ); 
             double buyPrice = High[iHH]+PadAmount*pips;

//I then use this "buyPrice" in conjunction with OrderSend for where the price of the entry order is...

나는 모든 MA가 어디에서 부채질되는지 알고 싶지만 항상 사실일 필요는 없습니다... 다른 무엇보다 먼저 사실이 되기를 바랄 뿐입니다... 이것이 사실임을 바탕으로 필요한 모든 것 이 가격에서 발생하는 것은 60 EMA 아래에서 닫히지 않는 막대가 (장기적으로) 롱 포지션이 밀려날 때까지 유효하다는 것입니다...

TriggerBarTime을 사용하여 모든 이동 평균 이 올바른 순서로 쌓인 가장 높은 지점과 21 EMA를 만지기 시작하는 막대를 찾고 있습니다.

그래서 비록 당신이 나를 위해 들여쓰기를 바로잡았지만, 그것은 내가 전에 썼던 것과 거의 비슷합니다(제가 빠진 것이 없다면?) 제가 그것을 제대로 설명하지 못한 제 잘못을 찾아냅니다.

(아 예 - 실수였던 bool이어야 한다는 것을 압니다. 저는 단순히 놀고 있었고 다시 전환하는 것을 잊었습니다.)

 
double TriggerBarTime = (i1>i2 .. 
그것은 참 또는 거짓 0 또는 1 다른 것
 int iTBT= iBarShift( NULL , 60 , TriggerBarTime, true ),
iBarShift에 대한 세 번째 인수는 날짜/시간이어야 합니다. iBarShift(0) 또는 (1)은 항상 Bars-1입니다.
 
datetime           TriggerBarTime;
글로벌섹션에 있는데..

이전 글이 이해가 안 가나요? ^^

귀하의 위 게시물과 관련하여 If 라인을 작성하는 방법을 제안할 수 있습니까?
 
DomGilberto : 글로벌 섹션에 이것을 가지고 있습니다 ...
그리고 당신은 그것을 지역 선언으로 숨겼습니다.
 
죄송하지만 다시 말씀드리지만 저에게는 의미가 없습니다...
 
DomGilberto : 죄송합니다만, 다시 말씀드리지만 제게는 의미가 없습니다...
 int myVariable = 0 ;
int start(){
   double myVariable = 1 ;
   Print (myVariable); // Outputs 1 .0
  myVariable++;
  myFunction(myVariable);
}
void myFunction( double v){
   Print (myVariable, " " ,v); // Outputs 0 2 .0
}