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

 
Omm :

선물 거래 시간을 결정하는 방법을 알려주세요.

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

0을 생성


어떤 브로커?

사실 브로커가 조정합니다. 그래서 가장 먼저 할 일은 그를 고문하는 것입니다.

 
alexey1979621 :
친애하는 포럼 사용자! Expert Advisor에서 가격이 채널 라인을 교차하는 조건을 설정하는 방법, 예를 들어 가격이 위에서 채널 라인을 교차하고 거래가 열리거나 닫힙니다. 당신이 관심을 갖는 것은 교차로의 순간이라는 점에 유의하십시오. 도움을 주시면 감사하겠습니다.

이중 price0=NormalizeDouble(ObjectGetValueByShift("YourChannelLineName", 0),Digits)); - 막대의 선 값은 0입니다.

이중 price1=NormalizeDouble(ObjectGetValueByShift("YourChannelLineName", 1),Digits)); - 막대 1의 라인 값.

음, 0 막대에서 브레이크아웃 순간을 결정하는 가장 간단한 방법은 다음과 같습니다. if(High[0]>price0 && High[1]<=price1) {line is broken up}, if(Low[0]<price0 && Low[ 1]>= price1) {줄 구분}. if는 돌파하는 순간부터 현재 바의 끝까지 참이 될 것입니다. 채널 라인에 OBJPROP_RAY==True 속성이 있는 것이 바람직합니다.

 
alexey1979621 :
친애하는 포럼 사용자! Expert Advisor에서 가격이 채널 라인을 교차하는 조건을 설정하는 방법, 예를 들어 가격이 위에서 채널 라인을 교차하고 거래가 열리거나 닫힙니다. 당신이 관심을 갖는 것은 교차로의 순간이라는 점에 유의하십시오. 도움을 주시면 감사하겠습니다.

몇 가지 방법:

Ask > 채널 라인 및 Low[1] <= 채널 라인인 경우 상향 크로스오버

Bid < 채널 라인 및 High[1] >= 채널 라인인 경우 아래로 교차

기간이 1인 MA를 사용하여 확인할 수 있습니다.

 
프로그램에서 마지막 CLOSED 주문을 선택하고 정보를 얻으려면 어떻게 해야 합니까?
 
도와주셔서 감사합니다

. 아마도 코드의 일부를 첨부해야 했기 때문에 질문을 잘못 제기했을 것입니다. 나는 나 자신을 수정하고 있습니다.

제안으로

artmedia70 크로싱 종료 시 그렇게 지적했습니다. 화면에 따라 거래가 종료됩니다. 그러나 십자가가 있는 곳에서 거래를 마감해야 합니다.

무효 CheckForClose()
{
이중 PriceHigh, PriceLow;
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;

PriceHigh = iCustom(Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom(Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 계속;
//---- 주문 유형 확인
if(주문유형()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
부서지다;
}
if(주문 유형()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
부서지다;
}
}
//----
}

 
 
webip :
프로그램에서 마지막 CLOSED 주문을 선택하고 정보를 얻으려면 어떻게 해야 합니까?

마음이 원하는 것을 찾으십시오.
 
alexey1979621 :
도와주셔서 감사합니다

. 제가 질문을 잘못 제기한 것 같습니다. 코드의 일부를 첨부해야 했습니다. 나는 나 자신을 수정하고 있습니다.

제안으로

artmedia70 크로싱 종료 시 그렇게 지적했습니다. 화면에 따라 거래가 종료됩니다. 그러나 십자가가 있는 곳에서 거래를 마감해야 합니다.

무효 CheckForClose()
{
이중 PriceHigh, PriceLow;
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;

PriceHigh = iCustom(Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom(Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 계속;
//---- 주문 유형 확인
if(주문유형()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
부서지다;
}
if(주문 유형()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
부서지다;
}
}
//----
}

ExtremeTMA - 뻔뻔하게 다시 그립니다. 그리고 엄청난 역사의 조각 - 그 이상은 아닐지라도 마지막 30개의 바. 나는 그것에 대한 고문을 썼습니다. 상상해보십시오 : 신호가 나타나고 입력되었으며 얼마 후이 신호는 더 이상 역사에 없습니다. 칠면조가 다시 그려지고 밝혀졌습니다. 헛된 입력

교차로를 결정할 때 실수를 했습니다. if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... 글쎄, 비유로 반대의 경우.

PS 메시지 입력 창 상단 패널의 SRC 버튼 을 사용하여 코드를 삽입하십시오.

ZZY 자, 십자가가 있는 화면은 어디에 있습니까?

 
artmedia70 :

ExtremeTMA - 뻔뻔하게 다시 그립니다. 그리고 엄청난 역사의 조각 - 그 이상은 아닐지라도 마지막 30개의 바. 나는 그것에 대한 고문을 썼습니다. 상상해보십시오 : 신호가 나타나고 입력되었으며 얼마 후이 신호는 더 이상 역사에 없습니다. 칠면조가 다시 그려지고 밝혀졌습니다. 헛된 입력

교차로를 결정할 때 실수를 했습니다. if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... 글쎄, 비유로 반대의 경우.

PS 메시지 입력 창 상단 패널의 SRC 버튼 을 사용하여 코드를 삽입하십시오.


수정, 위의 화면과 같은 방법으로 거래를 마감했지만 적십자는 어디에 있습니다.

나는 ExtremeTMA가 다시 그리는 것에 동의하지만 이것이 진입점 검색에 영향을 미치지 않는다고 생각합니다. 여기서 가장 중요한 것은 필터입니다. TDI 표시기를 사용했습니다. 내가 상상한 것을 적용합니다 (즉시 손이 구부러져 프로젝트 어드바이저가 내 손과 일치한다고 말합니다). 한 가지 문제가 있습니다. 테스터에서는 1년 동안 5시간 동안 테스트했습니다(어딘가에서 오류가 났습니다). 어렵지 않다면 오류를 찾으십시오.

extern double   Lots             = 0.1 ;
extern string Сomment           = "TMA Canal2" ;
extern int TakeProfit           = 20 ;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20 ;     // уровень Stop Loss для покупки;
extern int Slippage             = 2 ; // проскальзывание 
extern int Magic                = 124 ;

extern string   Indi             = "ExtremeTMALine" ;
extern string TimeFrame         = "current time frame" ;
extern int     HalfLength        = 56 ;
extern int     Price             = PRICE_CLOSE ;
extern double ATRMultiplier     = 2.0 ;
extern int     ATRPeriod         = 100 ;
extern bool    Interpolate       = true ;
extern double TrendThreshold    = 0.5 ;
extern bool    Distances         = false ;


extern string   Indicatora       = "TradersDynamicIndex" ;
extern int RSI_Period           = 13 ;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34 ;     //20-40
extern int RSI_Price_Line       = 2 ;      
extern int RSI_Price_Type       = MODE_SMA ;       //0-3
extern int Trade_Signal_Line    = 7 ;   
extern int Trade_Signal_Type    = MODE_SMA ;   //0-3
extern bool UseAlerts           = false ;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
       if ( Digits == 3 || Digits == 3 ) // для пятизначного брокера
         {
            TakeProfit *= 10 ;
            StopLoss *= 10 ;
            Slippage *= 10 ;
         }
       return ( 0 );
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders( string symbol)
  {
   int buys= 0 ,sells= 0 ;
//----
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ;
       if (OrderSymbol()== Symbol () && OrderMagicNumber()== 124 )
        {
         if (OrderType()==OP_BUY)  buys++;
         if (OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if (buys> 0 ) return (buys);
   else        return (-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if (Volume[ 0 ]> 1 ) return ;
   
   PriceHigh = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1 , 0 );
   PriceLow = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2 , 0 );
   TDIHigh = iCustom ( Symbol (), 0 , "TradersDynamicIndex" , RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1 , 0 ); // голубая
   TDILow = iCustom ( Symbol (), 0 , "TradersDynamicIndex" , RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3 , 0 ); // голубая 
   RSIPriceLine = iCustom ( Symbol (), 0 , "TradersDynamicIndex" , RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4 , 0 ); // зеленая
   TradeSignalLine = iCustom ( Symbol (), 0 , "TradersDynamicIndex" , RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5 , 0 ); // красная
   
   
   if (Open[ 1 ]>PriceHigh || Close[ 1 ]>PriceHigh || High[ 1 ]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 , 0 , "TMA Canal2" , 124 , 0 ,Red);
       return ;
     }
//---- buy conditions
   if (Open[ 1 ]<PriceLow || Close[ 1 ]<PriceLow || Low[ 1 ]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 , 0 , "TMA Canal2" , 124 , 0 ,Blue);
       return ;
     }
//----
  }

   //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if (Volume[ 0 ]> 1 ) return ;
 
   PriceHigh = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1 , 0 ); 
   PriceLow = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2 , 0 ); 
   
   
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false )         break ;
       if (OrderMagicNumber()!= 124 || OrderSymbol()!= Symbol ()) continue ;
       //---- check order type 
       if (OrderType()==OP_BUY)
        {
         if (Low[ 1 ]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,White);
         break ;
        }
       if (OrderType()==OP_SELL)
        {
         if (High[ 1 ]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,White);
         break ;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if ( Bars < 100 || IsTradeAllowed()== false ) return ;
//---- calculate open orders by current symbol
   if (CalculateCurrentOrders( Symbol ())== 0 ) CheckForOpen();
   else                                     CheckForClose();
//----
  }
 
alexey1979621 :

수정, 위의 화면과 같은 방법으로 거래를 마감했지만 적십자는 어디에 있습니다.

나는 ExtremeTMA가 다시 그리는 것에 동의하지만 이것이 진입점 검색에 영향을 미치지 않는다고 생각합니다. 여기서 가장 중요한 것은 필터입니다. TDI 표시기를 사용했습니다. 내가 상상한 것을 적용합니다 (즉시 손이 구부러져 프로젝트 어드바이저가 내 손과 일치한다고 말합니다). 한 가지 문제가 있습니다. 테스터에서는 1년 동안 5시간 동안 테스트했습니다(어딘가에서 오류가 났습니다). 어렵지 않다면 오류를 찾으십시오.

내가 오류의 주제를 보기 전까지는 많은 경우가 있습니다.

적십자가 있는 곳에서 매도를 청산하기 위해서는 현재 바를 확인해야 합니다. If Ask<=close level && High[1]>close level