[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 461

 

내 경우에 모든 조건이 충족될 때 OrderSended 변수가 false 값을 취하지 않는 이유를 알려주십시오.

 int start()
  {
//----
   int i;
   int i2;
   double MACD;
   double MACD2 = iCustom ( Symbol (), 0 , "MACD" , 5 , 21 , 1 , 0 , 0 );
   double MACD3 = iCustom ( Symbol (), 0 , "MACD" , 5 , 21 , 1 , 0 , 1 );
   double MyNull = 0.0 ;
   int bar1;
   int bar2;
   static bool OrderSended = false;
   
   if (MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0 ) // Вот эти условия
     {
     OrderSended = false;
     }
   Print ( "MACD2 = " ,MACD2, "MACD3 = " ,MACD3, "OrderSended = " ,OrderSended);
   
   if (MACD2 < 0 && MACD3 > 0 && OrderSended == false)
     {
     if ( OrderSend ( Symbol (),OP_SELL,Lot,Ask,Slippage,Ask + StopLoss * Point , 0 ,OrdersComment,MagicNumber, 0 , Red ) > 0 )
       {
       OrderSended = true;
       }
     }
//----
   return ( 0 );
  }

이것은 MACD2 및 MACD3이 0보다 크며 두 변수가 모두 0보다 크면 거짓이 되어야 하지만 로그에 기록됩니다. 그리고 OrderSended는 여전히 참입니다.

 
sss2019 :

내 경우에 모든 조건이 충족될 때 OrderSended 변수가 false 값을 취하지 않는 이유를 알려주십시오.

이것은 MACD2 및 MACD3이 0보다 크며 두 변수가 모두 0보다 크면 거짓이 되어야 하지만 로그에 기록됩니다. 그리고 OrderSended는 여전히 참입니다.

 if (MACD2 < 0 && MACD3 > 0

코드에서 1은 0보다 크고 두 번째는 더 작습니다.

 
ilunga :

코드에서 1은 0보다 크고 두 번째는 더 작습니다.


따라서 이것은 포지션을 여는 신호일 뿐입니다. 여기에서는 조건이 0보다 큽니다.

   if (MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0 ) // Вот эти условия
     {
     OrderSended = false;
     }
 
sss2019 :


따라서 이것은 위치를 여는 신호일 뿐입니다. 여기에서 조건은 0보다 큽니다.

그러나 여기에서는 조건의 99%가 원하는 순서로 잘못된 순서로 계산되기 때문에 여기에 대괄호를 넣는 것이 좋습니다.

 if ((MACD2 > 0 && MACD3 > 0 ) || (MACD2 < 0 && MACD3 < 0 )) // Вот эти условия

 

이 디자인이 작동하는지 알려주십시오.

 if ( OrdersTotal (MagicNumber))

즉, 특정 매직넘버를 가진 주문이 있다면...

 
sss2019 :

이 디자인이 작동하는지 알려주십시오.

즉, 특정 매직넘버를 가진 주문이 있다면...

함수를 직접 작성하는 경우에만
 int OrdersTotal(int magic)
 
그러나 예를 들어, 이 함수가 사용된 하나의 값을 반환합니까 아니면 모든 값을 반환합니까? 예를 들어, 루프에서 두 개의 변수에 값이 할당된 경우 루프는 두 변수의 값을 반환합니까, 아니면 마지막 변수만 반환합니까?
 

그래서 저는 저만의 방식으로 프랙탈을 다루었습니다. 저는 저만의 방식으로 지표를 작성했습니다 . 음, 저에게는 더 쉽습니다. 문제는 문제가 있습니다.

화살표를 뒤로 3칸 이동하는 방법은 무엇입니까? :(

코드 조각...

SetIndexStyle(0, DRAW_ARROW,0,1);
SetIndexArrow(0,217);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW,0,1);
SetIndexArrow(1, 218);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexEmptyValue(1, 0.0);

IndicatorShortName("My_iFractals");
SetIndexLabel(0, "iFractalsUp");
SetIndexLabel(1, "iFractalsDn");

UPD

Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ - SetIndexShift(0,-3);

 
sss2019 :
그러나 예를 들어, 이 함수가 사용된 하나의 값을 반환합니까 아니면 모든 값을 반환합니까? 예를 들어 루프에서 두 개의 변수에 값이 할당된 경우 루프는 두 변수의 값을 모두 반환합니까 아니면 마지막 변수만 반환합니까?

아 그리고 죽..

1) for는 함수가 아니라 루프문입니다.

2) 함수는 return과 함께 반환하도록 지시된 것만 반환합니다.

3) 주기가 있는 변수는 느슨하게 결합됩니다. 한 주기에 최소 10개를 변경할 수 있습니다.

 

여러분, 문제가 무엇인지 이해할 수 없습니다. 마감 주문이 있는 이 상황은 명확하지 않습니다.

이와 같이 모든 것이 잘 작동할 때:

 double PriceBid = Bid;
         double PriceAsk = Ask;
        PrevPriceBid = PriceBid;
        PrevPriceAsk = PriceAsk;
         double be = GetWeightedBELevel();
         if (be != - 1 )
        {
                 double BuyLots = GetBuyLotsSum();
                 double SellLots = GetSellLotsSum();
                
                 double Swap = GetSwap();
                 //string str = be + " ";
                 if (Swap < 0 )
                {
                         double diff = BuyLots - SellLots;
                         //str = str + MarketInfo(Symbol(), MODE_TICKVALUE) * diff + " " + (-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point) + " ";
                        be += ND(-Swap / ( MarketInfo ( Symbol (), MODE_TICKVALUE) * diff) * Point + diff / MathAbs (diff) * 1 * Point );
                }
                 //str = str + Swap + " " + be;
                 //Comment(str);
                
                
                 if ((BuyLots > SellLots && ND(PrevPriceBid) < ND(be + (TakeProfitBuy) * Point ) && ND(PriceBid) >= ND(be + (TakeProfitBuy) * Point )) ||
                        (BuyLots < SellLots && ND(PrevPriceAsk) > ND(be - (TakeProfitSell) * Point ) && ND(PriceAsk) <= ND(be - (TakeProfitSell) * Point )))
                {
                        CloseAllBuy();
                        CloseAllSell();
                }
                

        }
                         ObjectDelete ( "ZeroBuy" );
                 if (BuyLots > SellLots)
                { double ZeroBuy = ND(be + TakeProfitBuy * Point );
                 ObjectCreate ( "ZeroBuy" , OBJ_ARROW , 0 ,Time[ 0 ],ZeroBuy, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "ZeroBuy" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "ZeroBuy" , OBJPROP_COLOR , Olive );}
                         ObjectDelete ( "ZeroSell" );
                 if (BuyLots < SellLots)
                { double ZeroSell = ND(be - TakeProfitSell * Point );
                 ObjectCreate ( "ZeroSell" , OBJ_ARROW , 0 ,Time[ 0 ],ZeroSell, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "ZeroSell" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "ZeroSell" , OBJPROP_COLOR , Olive );}
        
         //---------------------

맨 위 코드 아래에 이 코드를 추가합니다.

 //+X================================================================X+X+

   int b,s;
   double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs,SLbTwo,SLsTwo; //
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
      {   if ( OrderSymbol ()== Symbol ())
         {
            price = OrderOpenPrice ();
            lot   = OrderLots ();
             if ( OrderType ()==OP_BUY ) 
               {price_b = price_b+price*lot; b++;  lot_b=lot_b+lot;}
             if ( OrderType ()==OP_SELL) 
               {price_s = price_s+price*lot; s++;  lot_s=lot_s+lot;}
   }  }  }
   ObjectDelete ( "SLb" );
   if (b!= 0 ) 
   {  SLb = (price_b/lot_b)+TakeProfitBuy * Point ;
       ObjectCreate ( "SLb" , OBJ_ARROW , 0 ,Time[ 0 ],SLb, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLb" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLb" , OBJPROP_COLOR , Navy );
   }
   ObjectDelete ( "SLbTwo" );
   if (b!= 0 ) 
   {  SLbTwo = (price_b/lot_b)+TakeProfitBuyTwo * Point ;
       ObjectCreate ( "SLbTwo" , OBJ_ARROW , 0 ,Time[ 0 ],SLbTwo, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLbTwo" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLbTwo" , OBJPROP_COLOR , Navy );
   }
   
   ObjectDelete ( "SLs" );
   if (s!= 0 ) 
   {  SLs = (price_s/lot_s)-TakeProfitSell * Point ;
       ObjectCreate ( "SLs" , OBJ_ARROW , 0 ,Time[ 0 ],SLs, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLs" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLs" , OBJPROP_COLOR , Maroon );
   }
   ObjectDelete ( "SLsTwo" );
   if (s!= 0 ) 
   {  SLsTwo = (price_s/lot_s)-TakeProfitSellTwo * Point ;
       ObjectCreate ( "SLsTwo" , OBJ_ARROW , 0 ,Time[ 0 ],SLsTwo, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLsTwo" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLsTwo" , OBJPROP_COLOR , Maroon );
   }
   
   if ((totalBuy > 1 ) && (SLb > Ask) && (SLbTwo < Ask) && (DnM15 > Bid)) //
   {
    CloseAllBuy();
   }
   if ((totalSell > 1 ) && (SLs < Bid) && (SLsTwo > Bid) && (UpM15 < Ask)) //
   {
   CloseAllSell();
   }
   //--------------------------------- 

첫 번째 기능이 더 이상 작동하지 않고 주문을 마감하지 않은 후. 로그에 오류가 표시되지 않습니다. 왜 그래, 내가 어디에서 실수를 했습니까?


두 기능 모두 아래로 모든 개체를 이동하고 작동했습니다. 질문이 제거되었습니다!

사유: