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

 
FoxUA :


함수를 호출하기만 하면 됩니다. 그게 전부입니다. "만약 하나 이상의 주문이 있는 경우"라는 한 줄만 있으면 됩니다. 그게 끝이고 여기에서 전체 기능을 제공합니다.

이것이 내가 주문 데이터를 저장하는 방법입니다


이것은 라이브러리에 대한 간단한 쓰기입니다.

입력은 계산되는 주문의 유형이며 그 마법은 열려 있거나 주문한 주문의 수를 반환합니다.

 int ChPos( int TypePos, int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count= 0 ;
   for ( i= 0 ; i < OrdersTotal (); i++)         
   {
      if ( OrderSelect (i,SELECT_BY_POS)==true) 
       {                                   
           if (OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if (OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if (OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if (OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if (OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if (OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return (count);
}

이렇게 사용할 수 있습니다

if ((FastEma - SmallEma) > Comparor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak :


이것은 라이브러리에 대한 간단한 쓰기입니다.

입력은 계산되는 주문의 유형이며 그 마법은 열려 있거나 주문한 주문의 수를 반환합니다.

이렇게 사용할 수 있습니다

if ((FastEma - SmallEma) > Comparor*Point && ChPos(OP_BUY,1111) < OpenPosition)

나는 그런 기능이 있고 나는 그것을 필요로하지 않습니다, 나는 필요합니다
"만약 하나 이상의 주문이 있는 경우 .... 다음"으로 한 줄이면 됩니다.

당신이 보여준 것과 같은 기능을 가진 내 데이터가 여기에 저장됩니다

 int total_order;             // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

그리고 여기 그녀가 어떻게 생겼는지입니다

 void Myorders(){
       int cnt;
      total_order = OrdersTotal();
      my_total_order = 0 ;
      HaveBuyOrder          = false ;
      HaveSellOrder         = false ;
      HaveBuyStopOrder      = false ;
      HaveSellStopOrder     = false ;
      HaveBuyLimitOrder     = false ;
      HaveSellLimitOrder    = false ;
      HaveBuyLimitOrderEnd  = false ;
      HaveSellLimitOrderEnd = false ;      
       for (cnt = total_order - 1 ; cnt >= 0 ; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true ;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true ; my_total_order++;}
} } }
 

잡힌 것 같다

정적 int aaa = OrdersHistoryTotal()+ OrdersTotal()

if (귀하의 조건 && aaa < OrdersHistoryTotal()+ OrdersTotal() )

{

연산자

aaa=OrdersHistoryTotal()+OrdersTotal()

}

그렇다면 마술사를 고려하면 여전히 기능면에서 더 좋습니다. 당신은 당신이 상상한 것에 대해 목소리를 낼 수 있습니다. 제가 제대로 이해하면 논리가 좀 이상한데, 다른 주문이 열리면 조치를 취해야 하는군요. OpenPosition 이상으로 주문을 여는 것이 더 쉽겠죠?

P S 귀하의 함수는 미결 주문 및 보류 주문의 총 수를 반환합니다. OP_BUY 주문이 몇 개인지, OP_BUYLIMIT OP_SELLLIMIT OP_SELL 등이 있으면 발행하지 않습니다.

 
ivandurak :

네, 알았습니다. 이제 if 함수의 문제는 펑크가 무엇인지, 내가 무엇을 했는지 이해하지 못하는 것이 아닙니다.

 if (bt== 1 &&bl== 7 ) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot* 3 ,PRAskL); 
   if (HaveBuyLimitOrderEnd== true ) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

일반적으로 본질은 첫 번째 의미가 충족되고 그것에 대한 불만이 없다는 것입니다.

하지만 (HaveBuyLimitOrderEnd== true ) 이면 원하지 않습니다.
{ModifyBuyStopOrder(PRAskS); // 선택하다
} }

즉, 다음과 같이 들립니다. HaveBuyLimitOrderEnd 주문이 있는 경우 가격 PRAskS 변경으로 수정합니다.

뭔가 옳지 않지만 이해할 수없는 것은 게시물의 위 코드에서 void Myorders()에서 HaveBuyLimitOrderEnd 값을 가져옵니다.

그리고 예, 이 값 if(bt==1&&bl==7) 이 true인 경우 주요 tobish이고 아래의 모든 것을 실행합니다.


예, 내가 OrderLots()==3*Lot를 설정했기 때문에 HaveBuyLimitOrderEnd== true일 가능성이 높습니다. 이제 모든 주문을 0.3으로 수정하기 시작합니다.

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0 ;
      HaveBuyOrder          = false ;
      HaveSellOrder         = false ;
      HaveBuyStopOrder      = false ;
      HaveSellStopOrder     = false ;
      HaveBuyLimitOrder     = false ;
      HaveSellLimitOrder    = false ;
      HaveBuyLimitOrderEnd  = false ;
      HaveSellLimitOrderEnd = false ;      
      for (cnt = total_order - 1 ; cnt >= 0 ; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true ;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true ; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true ;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true ; my_total_order++;}
} } }
빨간색으로 강조 표시된 내용을 확인하십시오. 거래 주문의 유형은 동일하지만 라인의 변수는 원래대로 다르게 설정됩니다.
 
ivandurak :
빨간색으로 강조 표시된 것을 확인하십시오. 거래 주문의 유형은 동일하지만 라인의 변수는 원래대로 다르게 설정됩니다.

예, 그래야 합니다. 다른 열기 기능이 있고 OrderType()이 아닌 요청을 하기 때문입니다. 그러나 열려 있는지 토비시 플래그에게 물어볼 것입니다. 그러나 문제는 오히려 이 함수에 없다는 것입니다. 요청도 작동하지 않습니다. 먼저 던졌고 해당 기능이 정상적으로 열려 있습니다.

따라서 문제는 연산자의 쿼리에 있습니다.

 

문제는 다른 곳에 있는 것 같습니다. 그러나 전체 코드를 볼 필요가 있습니다.

 
Vinin :

문제는 다른 곳에 있는 것 같습니다. 그러나 전체 코드를 볼 필요가 있습니다.


확실히 다른 것이 아니라 다른 모든 것이 작동합니다. 문제는 요청(HaveBuyLimitOrderEnd == true)이 올바르지 않다는 것입니다. 그래서 수정 및 삭제해야 할 것을 그에게 다른 방법으로 알려야 하는 내 머리를 깨고 있습니다.

또는 쿼리 자체의 구성이 올바르지 않습니다.

if(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);

if (HaveBuyLimitOrderEnd==true)

{ModifyBuyStopOrder(PRAskS);
} }

 
FoxUA :

예, 그래야 합니다. 다른 열기 기능이 있고 OrderType()이 아닌 요청을 하기 때문입니다. 그러나 열려 있는지 토비시 플래그에게 물어볼 것입니다. 그러나 문제는 오히려 이 함수에 없다는 것입니다. 요청도 작동하지 않습니다. 먼저 던졌고 해당 기능이 정상적으로 열려 있습니다.

따라서 문제는 연산자의 쿼리에 있습니다.

 if (bt== 1 &&bl== 7 ) 
{ OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot* 3 ,PRAskL); 
  if (HaveBuyLimitOrderEnd== true ) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


그런데 흥미롭게도 빨간색으로 강조 표시된 함수에서 HaveBuyLimitOrderEnd 플래그가 true로 설정되어 있지 않으면 if 전에 Myorders()를 호출해야 합니다. 그렇지 않으면 FIG는 거기에 무엇이 있는지 알고 있습니다. 그리고 만일을 대비하여 플래그(변수)

HaveBuyOrder=거짓;
HaveSellOrder=거짓;
HaveBuyStopOrder = 거짓;
HaveSellStopOrder = 거짓;
HaveBuyLimitOrder=거짓;
HaveSellLimitOrder=거짓;
HaveBuyLimitOrderEnd = 거짓;
HaveSellLimitOrderEnd = 거짓;
글로벌 수준에서 정의해야 합니다.

 
ivandurak :


그런데 흥미롭게도 빨간색으로 강조 표시된 함수에서 HaveBuyLimitOrderEnd 플래그가 true로 설정되어 있지 않으면 if 전에 Myorders()를 호출해야 합니다. 그렇지 않으면 FIG는 거기에 무엇이 있는지 알고 있습니다. 그리고 만일을 대비하여 플래그(변수)

HaveBuyOrder=거짓;
HaveSellOrder=거짓;
HaveBuyStopOrder = 거짓;
HaveSellStopOrder = 거짓;
HaveBuyLimitOrder=거짓;
HaveSellLimitOrder=거짓;
HaveBuyLimitOrderEnd = 거짓;
HaveSellLimitOrderEnd = 거짓;
글로벌 수준에서 정의해야 합니다.

글로벌하다


bool HaveBuyOrder; // 공개 시장 매수 주문 플래그
bool HaveSellOrder; // 공개 시장 판매 주문 플래그
bool HaveBuyStopOrder; // 미결 보류 구매 주문 플래그
bool HaveSellStopOrder; // 오픈 보류 중인 판매 주문에 대한 플래그
bool HaveBuyLimitOrder; // 미결 보류 구매 주문 플래그
bool HaveSellLimitOrder; // 오픈 보류 중인 판매 주문에 대한 플래그
bool HaveBuyLimitOrderEnd; // 미결 보류 구매 주문 플래그
bool HaveSellLimitOrderEnd; // 오픈 보류 중인 판매 주문에 대한 플래그

이것은 주문 열기 기능입니다

티켓 = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE );
if (티켓 > 0) {
HaveBuyStopOrder = true;

if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("BuyStop 주문을 위한 함수: ", OrderOpenPrice());
}
else Print("오류 # ", GetLastError(), " BuyStop 주문을 위한 함수",MarketInfo(Curr_symb,MODE_ASK));
반환(티켓);
}

다른 모든 것이 작동한다고 말합니다.