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

 

좋은 오후입니다. 문제를 해결하는 데 도움을 줄 수 있는 사람이 있습니까? 제가 뭔가 잘못하고 있는 것 같습니다.

Klimov 블록이 있습니다. take로 마지막 위치를 닫기 위한 플래그를 반환합니다. 그리고 발에 동일하게,

 //+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    ocp, otp;
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    otp= NormalizeDouble (OrderTakeProfit(), dg);
     if (ocp==otp) return (True);
  }
   return (False);
}

그리고 여기 내가 그것을 사용하는 방법이 있습니다

 bool Buystop=isCloseLastPosByStop( NULL ,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake( NULL ,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop( NULL ,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake( NULL ,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if (total== 1 ) 
  {
   if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   }  
   if (BuyTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    }     
    
   if (Sellstop==True)
   {   OpenPosition( NULL , OP_BUY,  Lot, 0 , Ask+Tp* Point ,MagBuy);
   }  
   if (SellTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    } }

처음에는 모든 것이 계획대로 진행되고 4번째 로트에서 필요한 것이 열리고 이 로트가 열립니다.

 if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   } 

나는 그것이 무엇을 위해 나타나는지 알 수 없다

여기에서 명확성을 위해

아니요. 시간 유형 주문하다 용량 가격 S/L T/P 이익 균형
하나 2011.01.03 00:00 구입 하나 1.00 1.3346 1.3146 1.3446
2 2011.01.03 00:00 팔다 2 1.00 1.3344 0.0000 0.0000
2011.01.05 15:18 s/l 하나 1.00 1.3146 1.3146 1.3446 -2001.70 47998.30
4 2011.01.05 15:18 팔다 1.00 1.3146 1.3546 1.2946
5 2011.01.07 14:38 t/p 1.00 1.2946 1.3546 1.2946 1983.88 49982.18
6 2011.01.07 14:38 팔다 4 1.00 1.2944 1.3344 1.2744
7 2011.01.07 14:38 구입 5 1.00 1.2946 1.2746 1.3046

[삭제]  
FoxUA :

나는 그것이 무엇을 위해 나타나는지 알 수 없다


예 모든 것이 정확합니다.

첫 번째 수표(총==1)는 주문이 여전히 1일 때 통과합니다. 블록 내에서 마지막으로 마감된 매도 -> 오픈, 마지막으로 마감된 매수 -> 다시 오픈을 찾습니다. 이미 3 영장이 밝혀졌습니다.

 
Figar0 :


예 모든 것이 정확합니다.

첫 번째 수표(총==1)는 주문이 여전히 1일 때 통과합니다. 블록 내에서 마지막으로 마감된 매도 -> 오픈, 마지막으로 마감된 매수 -> 다시 오픈을 찾습니다. 이미 3 영장이 밝혀졌습니다.


예, 하지만 2개의 주문만 생성하여 이전에 6번에서 주문을 열지 않도록 하는 방법,

아니요. 시간 유형 주문하다 용량 가격 S/L T/P 이익 균형
하나 2011.01.03 00:00 구입 하나 1.00 1.3346 1.3146 1.3446
2 2011.01.03 00:00 팔다 2 1.00 1.3344 0.0000 0.0000
2011.01.05 15:18 s/l 하나 1.00 1.3146 1.3146 1.3446 -2001.70 47998.30
4 2011.01.05 15:18 팔다 1.00 1.3146 1.3546 1.2946
5 2011.01.07 14:38 t/p 1.00 1.2946 1.3546 1.2946 1983.88 49982.18
6 2011.01.07 14:38 팔다 4 1.00 1.2944 1.3344 1.2744
7 2011.01.07 14:38 구입 5 1.00 1.2946 1.2746 1.3046

[삭제]  

예, 많은 옵션이 있습니다. 가장 쉬운 방법은 매수 또는 매도 유형의 미결 주문을 확인하는 것입니다. 다음을 취하십시오(BuyOrders, SellOrders, TotalOrders 변수는 프로그램의 전역 변수 이며 start() 함수에서 int BuyOrders, SellOrders, TotalOrders;로 선언해야 합니다.)

 void OrdersRecount()
{
  BuyOrders= 0 ; SellOrders= 0 ; TotalOrders= 0 ;
   if ( OrdersTotal ()> 0 )
  {
     for ( int j = 0 ; j < OrdersTotal (); j++) 
    {
       if ( OrderSelect (j, SELECT_BY_POS)) 
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagBuy)
        {
           if (OrderType() == OP_BUY) BuyOrders++;
           if (OrderType() == OP_SELL) SellOrders++;        
          TotalOrders++;
        }
      }
    } 
  }
}
 
Figar0 :

예, 많은 옵션이 있습니다. 가장 쉬운 방법은 매수 또는 매도 유형의 미결 주문을 확인하는 것입니다. 이것을 가져 가라:


사용법을 모르겠는데 어렵지 않다면 도와주세요

[삭제]  
FoxUA :


사용법을 모르겠는데 어렵지 않다면 도와주세요


내가 당신을 도울 것이지만 당신의 코드의 논리는 여전히 나에게 이해하기 어렵습니다.

   if (Buystop==True)
   {   OpenPosition( NULL , OP_SELL, Lot,Bid+Sl3* Point , Bid-Tp3* Point ,MagBuy);
   }  
   if (BuyTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    }     
    
   if (Sellstop==True)
   {   OpenPosition( NULL , OP_BUY,  Lot, 0 , Ask+Tp* Point ,MagBuy);
   }  
   if (SellTake==True)  
    { OpenPosition( NULL , OP_BUY,  Lot, Ask-Sl* Point , Ask+Tp* Point ,MagBuy); 
    } }
매수가 세 가지 경우에 열리고 한 가지 경우에 매도한다고 확신하십니까? 왠지 대칭이 아닌...
 
Figar0 :


내가 당신을 도울 것이지만 당신의 코드의 논리는 여전히 나에게 이해하기 어렵습니다.

세 가지 경우에 매도가 열리며 한 번의 매수가 발생한다고 확신하십니까? 왠지 대칭이 아닌...


예, 그들이 말했듯이 그렇게해야합니다. 가장 중요한 것은 시장에 포즈가 없을 때 Toko를 열고 선택한 값 중 하나가 정확하면 1 주문을 열고 기다리십시오. 닫는 포즈.

 bool totalBuy=ExistPositions( NULL ,OP_BUY,MagBuy) ;
bool totalSell=ExistPositions( NULL ,OP_SELL,MagBuy) ;


if (totalBuy==False||totalSell==False) 
[삭제]  
FoxUA :

예, 그들이 말했듯이 그렇게해야합니다. 가장 중요한 것은 시장에 포즈가 없을 때 Toko를 열고 선택한 값 중 하나가 정확하면 1 주문을 열고 기다리십시오. 닫는 포즈

저것들. 구매 주문 이 2개 있고 판매 주문이 1개 없는 경우 상황이 가능하다는 것이 밝혀졌습니까?
 

Figar0 :

Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж

턴당 아니요, 중지 없는 판매 및 트렐링을 포함하여 2개의 포즈만 있어야 합니다. 베이킹 시트에서 어떤 일이 일어나는지 볼 수 있습니다. 모든 것이 정확합니다. Toko는 6번에서 추가 포즈를 엽니다.
[삭제]  
FoxUA :
턴당 아니요, 중지 없는 판매 및 트렐링을 포함하여 2개의 포즈만 있어야 합니다. 베이킹 시트에서 어떤 일이 일어나는지 볼 수 있습니다. 모든 것이 정확합니다. Toko는 6번에서 추가 포즈를 엽니다.


글쎄, 그러면 모든 것이 훨씬 더 복잡해질 것이고, 알고리즘이 어떻게 작동해야 하는지 말로 설명하고, 내가 그것을 얻은 이후로 도우려고 노력할 것입니다)

- 동시에 2개의 포지션이 가능합니다.

- 첫 번째 오픈 2 포즈: 매수 및 매도;

- 롱 포지션이 손절매로 청산된 경우 -> SL과 TP가 3배인 숏 포지션을 열면 일반 ST와 TP가 있는 매도 포지션과 3배가 된 매도 포지션이 있습니다.

더 멀리?