공개 거래 확인 문제 - 페이지 5

 
BrotherPyrus :
안녕하세요 다즈앤코입니다.

hothand는 5자리 MT4에서 작동하지만 4자리 플랫폼에서는 작동하지 않습니다.
어떻게 작동하지 않는지 더 구체적으로 말씀해 주시겠습니까?
 
BrotherPyrus :
hothand는 5자리 MT4에서 작동하지만 4자리 플랫폼에서는 작동하지 않습니다. 이 문제의 원인과 해결 방법에 대한 단서가 있습니까?
EA는 4/5자리, TP, SL 및 미끄러짐을 조정해야 합니다. ECN 중개인에서는 먼저 개설한 다음 중지를 설정해야 합니다.
 //++++ These are adjusted for 5 digit brokers.
int      pips2points;     // slippage  3 pips    3=points    30=points
double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int      Digits .pips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)
int      init(){
     if ( Digits == 5 || Digits == 3 ){     // Adjust for five (5) digit brokers.
                pips2dbl    = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;
    } else {    pips2dbl    = Point ;    pips2points =   1 ;   Digits .pips = 0 ; }
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
 
   if (iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
                  {

                          
                               //  if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside bar
                                 if ( iHigh (hothand(), 60 , 2 )> iHigh (hothand(), 60 , 1 ) && iLow (hothand(), 60 , 2 ) < iLow (hothand(), 60 , 1 )) // see if we have an inside bar
                                 {                                                                                                     // on the hothand pair
                                           
                                         // IB found 
                                         if ( iHigh (hothand(), 60 , 1 ) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
                                          {
                                             int     buyspread= MarketInfo (hothand(),MODE_SPREAD);
                               double buyentry =   iHigh (hothand(), 60 , 1 ) + 10 + buyspread;   //Low of prev bar + 1 pip + spread
                               double buystop = iLow (hothand(), 60 , 1 ) - 10 ;     //Low of prev bar - 1 pip
                               double buytpx1 = iHigh (hothand(), 60 , 1 )+( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 )); //1:1 r:r
                               double buytpx3 = iHigh (hothand(), 60 , 1 )+( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 ))* 3 ; // 1:3 r:r
                              
                              
                           OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
                           OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx3, "DIBSBUY" , Mnumber3);
                            }
                            
                         if ( iLow (hothand(), 60 , 1 ) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
                            {
                               int     sellspread= MarketInfo (hothand(),MODE_SPREAD);
                               double sellentry = iLow (hothand(), 60 , 1 )- 10 ; //Low of prev bar - 1 pip 
                               double sellstop = iHigh (hothand(), 60 , 1 )+ 10 + sellspread; // High of prev bar + 1 pip + Spread
                               double selltpx1 = iLow (hothand(), 60 , 1 )-( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 )); //1:1 r:r
                               double selltpx3 = iLow (hothand(), 60 , 1 )-( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 ))* 3 ; // 1:3 r:r
                              
                              
                           OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
                           OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx3, "DIBSSELL" ,Mnumber3);   //Open Sell Order
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

좋아 내가 돌아왔어,


이것은 거래가 실행되는 내 코드의 일부입니다. 저는 잠시 동안 5자리 숫자로 작업할 것입니다. 여기서 아이디어는 내가 핫핸드 기능을 사용하여 그날 거래하기에 가장 좋은 쌍을 선택했다는 것입니다. 이 코드는 1시간 차트에서 내부 막대를 스캔해야 합니다. ( 핫핸드 함수는 btw 쌍의 문자열을 반환합니다.) 내부 막대를 찾으면 테스트 목적으로 플랫 아웃 매수 또는 매도 거래를 열도록 했습니다. 백테스터 가 하나의 차트에서 여러 쌍의 거래를 처리할 수 있는지 잘 모르겠습니다. 사용하는 모든 쌍에 대한 1분 기록을 다운로드했습니다. 하지만 제가 첨부한 차트인 유로달러에서만 거래가 열리는 것 같습니다.

WHRoeder도 방문하여 다시 도와주셔서 감사합니다. 그렇다면 ea로 거래를 열고 거래를 연 후 다시 돌아가서 sl과 tp를 채우는 것이 올바른 방법입니까? 나는 당신이 그 코드에서도 백만 가지 잘못된 점을 발견할 수 있다고 확신합니다.

 
  1. OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
    

    4/5 자리수에 대한 미끄러짐을 조정하지 않습니다. ECN과 호환되지 않음

    항상 반환 코드를 테스트하여 작동하지 않는 이유를 찾으십시오.

     int ticket = OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
    if (ticket < 0 ) Alert ( "OrderSend [1] failed: " , GetLastError ());

  2. buystop = iLow (hothand()...
    정류장은 hothand() 쌍을 기반으로 하지만 Symbol()을 사용하여 주문을 시작합니다. 그들이 같지 않다면 정류장은 완전히 가짜입니다
 
dazamate :

좋아 내가 돌아왔어,


이것은 거래가 실행되는 내 코드의 일부입니다. 저는 잠시 동안 5자리 숫자로 작업할 것입니다. 여기서 아이디어는 내가 핫핸드 기능을 사용하여 그날 거래하기에 가장 좋은 쌍을 선택했다는 것입니다. 이 코드는 1시간 차트에서 내부 막대를 스캔해야 합니다. ( 핫핸드 함수는 btw 쌍의 문자열을 반환합니다.) 내부 막대를 찾으면 테스트 목적으로 플랫 아웃 매수 또는 매도 거래를 열도록 했습니다. 백테스터가 1개의 차트에서 여러 쌍의 거래를 처리할 수 있는지 확실하지 않습니다. 사용하는 모든 쌍에 대한 1분 기록을 다운로드했습니다. 하지만 제가 첨부한 차트인 유로달러에서만 거래가 열리는 것 같습니다.


몇 가지 일반적인 의견:

Ask 에서 구매하고 Bid 에서 판매

귀하의 브로커가 ECN 유형 브로커인 경우 주문할 때 SL 및 TP를 설정할 수 없습니다(이 경우 0으로 설정). 주문한 다음 SL 및 TP를 추가하도록 주문을 수정해야 합니다.

항상 주문 결과를 확인 하고 반품된 오류가 있는지 확인하십시오. 이에 따라 조치를 취하여 이러한 오류를 처리해야 합니다.

여러 차트에서 이 EA를 사용하려는 경우, 즉 여러 차트에서 주문을 하려는 경우 Order Context Busy를 피하기 위해 일종의 Mutex가 필요합니다(WHRoeder의 게시물 확인, 그는 우수한 Mutex를 가지고 있음)

 
젠장 WHRoeder, 당신의 권리 "우리의 중지는 쌍 hothand()를 기반으로 하지만 당신은 Symbol()로 주문을 시작하고 있습니다" 나는 그것을 눈치채지 못했습니다. 얼마나 어리석은. 이 물건은 당신이 그것을 배우려고 노력하는 동안 정신적으로 너무 피곤해집니다. 하지만 그래 바보. 그 혼란을 극복해 주셔서 감사합니다. 아마 쉬고 내일 상쾌한 마음으로 돌아올 것입니다. 지적하신 부분을 수정하겠습니다.
 
dazamate :

하지만 제가 첨부한 차트인 유로달러에서만 거래가 열리는 것 같습니다.

네, . . .

 OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order

기호 ()는 EA/Indicator가 부착된 쌍입니다. 대신 이렇게 하려는 건가요?

 OrderSend ( hothand() ,OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
 

예, 그렇게하려고했지만 이제이 오류가 발생합니다.


http://clip2net.com/s/144hq


핫핸드 기능 의 쌍 출력을 인식하지 못하는 것처럼. 핫핸드 함수의 출력은 문자열이므로 작동하지 않는 것을 볼 수 없습니다.

 
dazamate :
핫핸드 기능의 페어 출력을 인식하지 못하는 것처럼. 핫핸드 함수의 출력은 문자열이므로 작동하지 않는 것을 볼 수 없습니다.
 OrderSend (hothand(),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
  1. Ask/Bid는 현재 Symbol() 가격이지만 다른 쌍을 열려고 합니다. 가짜 가격.
  2. 다른 TF/쌍에 대한 테스터에서 막대 0 값을 얻을 수 없습니다.
  3. 테스터, IIRC에서 다른 쌍의 거래를 열 수 없습니다.
  4. OrderSend 기능에 대한 알 수 없는 기호 이름 USDCHF
    그 끈은 어디서 얻나요? 현재 차트가 같은 패턴인지, USD,EUR, USD/EUR, USDEURm, USDEURfxf 등입니까?
  5. 현재 쌍만 거래하는 것이 좋습니다. hothand()가 현재가 아니면 거래가 없습니다. 테스터에서 작동하는 방식으로 EA를 항상 다른 쌍에 배치하여 거래하는 쌍을 제어하고 모든 함정을 피할 수 있습니다.
 

안녕하세요 여러분, 저는 다음을 수행하는 코드를 만들려고 합니다.


 extern string   sComment4                = "Max Hours allowed before pending orders are deleted" ;
extern int      pendinglimit        = 4 ;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour ( TimeCurrent ());


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 

   if ( TimeHour ( TimeCurrent ()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
     {
         for ( int tnumber = OrdersTotal ()- 1 ; tnumber >= 0 ; tnumber--)   //scan through open orders
        {
           if ( OrderSelect (tnumber, SELECT_BY_POS) &&   
           OrderType ()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
             OrderMagicNumber ()==(Mnumber1||Mnumber3))     // The orders magic number is the same as the magic number used in this ea
          
               {
                 OrderSelect (tnumber, SELECT_BY_POS);     // Select order
                 OrderDelete (tnumber);                     // Delete it
               }
        }
     }

x개의 막대에 대해 보류 중인 주문 이 열려 있는 경우 막대 번호가 x를 초과하면 삭제하십시오.


내 논리에 문제가 있는 것은 아닐까?

사유: