무료로 어드바이저를 작성해 드립니다 - 페이지 85

 
Evgenij Litvintsev :

안녕하세요! 누군가 내 전략을 자동화하는 데 관심이 있을 수 있습니다. 지금은 작동하지만 반자동 모드에서는 자동으로 작동하고 싶습니다.


거래 결과를 볼 수 있습니까?

 

안녕하십니까, 하나의 기능에서 주문 티켓, 로트 및 이익을 얻는 방법을 알려주십시오.예:

double OldTicketSell()// 가장 먼 매도 주문 찾기

{
이중 MaxDist=0,oldprofit,lot;
정수 티켓 = 0;
이중 BID=시장정보(Symbol(),MODE_BID);
이중 ASK=시장 정보(Symbol(),MODE_ASK);
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(주문선택(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL && MaxDist<MathAbs(OrderOpenPrice()-ASK))
{
MaxDist=MathAbs(OrderOpenPrice()-ASK);
ticket=티켓 주문();
오래된 이익 = 주문 이익();
많은 = OrderLots();
}
}
}
반환(티켓);

}

기능은 명확합니다. 찾은 데이터를 추출하는 방법이 명확하지 않거나 로트 및 이익 아래에 복사해야 합니다.


 
Николай :

좋은 저녁입니다. 한 기능에서 오더 티켓, 로트 및 이익을 얻는 방법을 알려주십시오.

기능은 명확하고, 검색된 데이터를 추출하는 방법이 명확하지 않거나, 로트 및 이익 아래에 복사해야 합니다.

이렇게 될 수 있을까

 struct InfoOrder
{
     int ticket;
     double lot,
            profit,
            swap,
            commission,
            sl, tp;
     datetime timeOpen;
     string comment;
} infoOrder;

void OldSell( void ) // Находим самый дальний ордер на продажу
{
   double MaxDist= 0 ;
   double BID= MarketInfo ( Symbol (), MODE_BID );
   double ASK= MarketInfo ( Symbol (), MODE_ASK );
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderType ()== OP_SELL && MaxDist< MathAbs ( OrderOpenPrice ()-ASK))
         {
             MaxDist= MathAbs ( OrderOpenPrice ()-ASK);
             infoOrder.ticket= OrderTicket ();
             infoOrder.profit = OrderProfit ();
             infoOrder.lot = OrderLots ();
         }
      }
   }
   return ; 
}
 
Konstantin Nikitin :

이렇게 될 수 있을까

다 좋은데 저는 찻주전자에요 제가 아는 한 에서 Expert Advisor를 쓰려고 합니다 (조금 집어왔습니다), 변수가 구조체라는 걸 깨달았지만 어떻게 해야할지 명확하지 않습니다 이 구조에서 데이터를 가져옵니다. 예를 들어, 가장 먼 주문을 찾은 다음 이익을 로트로 나누어 현재 가격에서 이 로트까지의 포인트 수를 구해야 합니다. 그런 다음 우리는 반대 방향의 순서의 이익을 얻고 (나는 그것을 얻는 방법을 알고 있습니다), 그것을 반대 순서의 이전에 계산 된 포인트 수로 나누고 로트 수를 얻고이 로트 수로 닫습니다 완전히 또는 부분적으로 먼 주문.
 
Konstantin Nikitin :

이렇게 될 수 있을까

저도 묻고 싶습니다. 싸이클에서 시가를 비교하여 가격 에서 가장 먼 주문을 찾을 수 있을까요? 이렇게 하면 더 쉬울 것 같은데요?

 
Николай :

저도 묻고 싶습니다. 해당 싸이클의 시작가를 비교하여 가격 에서 가장 먼 주문을 찾을 수 있을까요? 이렇게 하면 훨씬 더 쉬울 것 같은데요?

물론 당신은 할 수. 그것이 더 쉬운지 아닌지는 당신이 필요로 하는 것에 달려 있습니다.
글쎄요, 위에서 질문하신 질문의 예입니다.

 struct InfoOrder
{
     int ticket;
     double lot,
            profit,
            swap,
            commission,
            sl, tp;
     datetime timeOpen;
     string comment;
} infoOrder;

void OnTick ()
{
     OldSell();
     Print ( "Ticket: " , infoOrder.ticket);
     Print ( "Profit: " , infoOrder.profit);
     Print ( "Lot: " , infoOrder.lot);
     Print ( "-----=====-----" );
     
     return ;
}

void OldSell( void ) // Находим самый дальний ордер на продажу
{
   double MaxDist= 0 ;
   double BID= MarketInfo ( Symbol (), MODE_BID );
   double ASK= MarketInfo ( Symbol (), MODE_ASK );
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderType ()== OP_SELL && MaxDist< MathAbs ( OrderOpenPrice ()-ASK))
         {
             MaxDist= MathAbs ( OrderOpenPrice ()-ASK);
             infoOrder.ticket= OrderTicket ();
             infoOrder.profit = OrderProfit ();
             infoOrder.lot = OrderLots ();
         }
      }
   }
   return ; 
}
 
Konstantin Nikitin :

물론 당신은 할 수. 그것이 더 쉬운지 아닌지는 당신이 필요로 하는 것에 달려 있습니다.
글쎄요, 위에서 질문하신 질문의 예입니다.

이 모든 것을 보고 내가 어떤 찻주전자인지 이해합니다. 즉, void OldSell( void ) 함수 의 결과가 InfoOrder 구조체에 쓰여지고, 얻은 변수 infoOrder.ticket, infoOrder.profit, infoOrder.lot의 값을 사용할 수 있음을 알 수 있다. 기능을 조금 일반화했는데 제대로 했는지 안 했는지.

//-Структура для нахождения самого дальнего ордера на продажу
struct InfoOrder
{
     int ticket;
     double lot,
            profit,
            swap,
            commission,
            sl, tp;
     datetime timeOpen;
     string comment;
} infoOrder;

void OnTick ()
{
     OldSell();
     Print ( "Ticketbuy: " , infoOrder.ticket);
     Print ( "Profitbuy: " , infoOrder.profit);
     Print ( "Lotbuy: " , infoOrder.lot);
     Print ( "Ticketsell: " , infoOrder.ticket);
     Print ( "Profitsell: " , infoOrder.profit);
     Print ( "Lotsell: " , infoOrder.lot);
     Print ( "-----=====-----" );
     
     return ;
}

void OldSell( void ) // Находим самый дальний ордер на продажу
{
   double MaxDist= 0 ;
   double BID= MarketInfo ( Symbol (), MODE_BID );
   double ASK= MarketInfo ( Symbol (), MODE_ASK );
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         if ( OrderType ()== OP_BUY && MaxDist< MathAbs ( OrderOpenPrice ()-BID))
          {
             MaxDist= MathAbs ( OrderOpenPrice ()-BID);
             infoOrder.ticketbuy= OrderTicket ();
             infoOrder.profitbuy = OrderProfit ();
             infoOrder.lotbuy = OrderLots ();
           }  
             
         if ( OrderType ()== OP_SELL && MaxDist< MathAbs ( OrderOpenPrice ()-ASK))
          {
             MaxDist= MathAbs ( OrderOpenPrice ()-ASK);
             infoOrder.ticketsell= OrderTicket ();
             infoOrder.profitsell = OrderProfit ();
             infoOrder.lotsell = OrderLots ();
          }
      }
   }
   return ; 
}


 
Konstantin Nikitin :

물론 당신은 할 수. 그것이 더 쉬운지 아닌지는 당신이 필요로 하는 것에 달려 있습니다.
글쎄요, 위에서 질문하신 질문의 예입니다.

변수를 변경하는 것을 잊었습니다 인쇄
 
Николай :
나는 이 모든 것을 보고 내가 어떤 찻주전자인지 이해합니다. 즉, void OldSell( void ) 함수 의 결과가 InfoOrder 구조체에 쓰여지고, 얻은 변수 infoOrder.ticket, infoOrder.profit, infoOrder.lot의 값을 사용할 수 있음을 알 수 있다. 기능을 조금 일반화했는데 제대로 했는지 안 했는지.
 //-Структура для нахождения самого дальнего ордера на продажу
struct InfoOrder
{
     int ticket;
     double lot,
            profit,
            swap,
            commission,
            sl, tp,
            MaxDist;
     datetime timeOpen;
     string comment;
} infoOrder;

void OnTick ()
{
     if ( OldOrder( OP_BUY ) )
     {
         Print ( "Ticketbuy: " , infoOrder.ticket);
         Print ( "Profitbuy: " , infoOrder.profit);
         Print ( "Lotbuy: " , infoOrder.lot);
         Print ( "MaxDistbuy: " , infoOrder.MaxDist);
         Print ( "-----=====-----" );
     }
     if ( OldOrder( OP_SELL ) )
     {
         Print ( "Ticketsell: " , infoOrder.ticket);
         Print ( "Profitsell: " , infoOrder.profit);
         Print ( "Lotsell: " , infoOrder.lot);
         Print ( "MaxDistsell: " , infoOrder.MaxDist);
         Print ( "-----=====-----" );
     }
     
     return ;
}

bool OldOrder( const int type) // Находим самый дальний ордер на продажу
{
   bool res = false ;
   double MaxDist= 0 ;
   double BID= MarketInfo ( Symbol (), MODE_BID );
   double ASK= MarketInfo ( Symbol (), MODE_ASK );
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         switch (type)
           {
             case OP_BUY :
               if ( OrderType ()!= OP_BUY ) break ;
               if (MaxDist<= MathAbs ( OrderOpenPrice ()-BID)) break ;
               infoOrder.MaxDist= MathAbs ( OrderOpenPrice ()-BID);
               infoOrder.ticket= OrderTicket ();
               infoOrder.profit = OrderProfit ();
               infoOrder.lot = OrderLots ();
               res = true ;
               break ;
             
           case OP_SELL :
               if ( OrderType ()!= OP_SELL ) break ;
               if (MaxDist>= MathAbs ( OrderOpenPrice ()-ASK)) break ;
               infoOrder.MaxDist= MathAbs ( OrderOpenPrice ()-ASK);
               infoOrder.ticket= OrderTicket ();
               infoOrder.profit = OrderProfit ();
               infoOrder.lot = OrderLots ();
               res = true ;
               break ;
        }
      }
   }
   return res; 
}

그런 것.
 




고문에서 그러한 구조를 찾았습니다. 그것이 무엇을 정의하는지 말하지 마십시오.

 struct TMartinData
{
   int     BUY_Positions;
   double BUY_LastPrice;
   double BUY_StopPrice;
   double BUY_Lots;
   datetime BUY_LastTime;
   bool    BUY_AllWD;
   int     SELL_Positions;
   double SELL_LastPrice;
   double SELL_StopPrice;
   double SELL_Lots;
   datetime SELL_LastTime;
   bool    SELL_AllWD;
} MartinData;

void OnTick ()

void FillMartinData()
{
   datetime bfirst = TimeCurrent ()+ 1 ;
   datetime blast = 0 ;
   datetime sfirst = TimeCurrent ()+ 1 ;
   datetime slast = 0 ;
   MartinData.BUY_Positions = 0 ;
   MartinData.SELL_Positions = 0 ;
   MartinData.BUY_Lots = 0 ;
   MartinData.SELL_Lots = 0 ;
   MartinData.BUY_LastPrice = - 1 ;
   MartinData.SELL_LastPrice = - 1 ;
   MartinData.BUY_StopPrice = - 1 ;
   MartinData.SELL_StopPrice = - 1 ;
   MartinData.BUY_LastTime = 0 ;
   MartinData.SELL_LastTime = 0 ;
   MartinData.BUY_AllWD = true ;
   MartinData.SELL_AllWD = true ;
   for ( int i= 0 ;i< OrdersTotal ();i++)
   {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
     if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNum)
     {
         if ( OrderType ()== OP_BUY )
        {
           MartinData.BUY_Positions++;
           if ( OrderOpenTime ()<bfirst)
           {
              MartinData.BUY_Lots = OrderLots ();
              MartinData.BUY_StopPrice = OrderStopLoss ();
              bfirst = OrderOpenTime ();
           }
           if ( OrderOpenTime ()>blast)
           {
              MartinData.BUY_LastPrice = OrderOpenPrice ();
              blast = OrderOpenTime ();
           }
           if ( OrderStopLoss ()< OrderOpenPrice ())
              MartinData.BUY_AllWD = false ;
        }
         else if ( OrderType ()== OP_SELL )
        {
           MartinData.SELL_Positions++;
           if ( OrderOpenTime ()<sfirst)
           {
              MartinData.SELL_Lots = OrderLots ();
              MartinData.SELL_StopPrice = OrderStopLoss ();
              sfirst = OrderOpenTime ();
           }
           if ( OrderOpenTime ()>slast)
           {
              MartinData.SELL_LastPrice = OrderOpenPrice ();
              slast = OrderOpenTime ();
           }
           if (( OrderStopLoss ()== 0 ) || ( OrderStopLoss ()> OrderOpenPrice ()))
              MartinData.SELL_AllWD = false ;
        }
     }
   }
   MartinData.BUY_LastTime = blast;
   MartinData.SELL_LastTime = slast;
   if (MartinData.BUY_Positions== 0 ) MartinData.BUY_AllWD = false ;
   if (MartinData.SELL_Positions== 0 ) MartinData.SELL_AllWD = false ;
}


사유: