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

 

여러분, 코드를 보십시오. 무엇이 잘못되었습니까 ?? 내 첫 번째 고문은 다음 전략에 따라 작동해야 합니다. 먼저 주문이 열리고(어느 방향으로든, 즉 무작위로 상관 없음) 보류 중인 주문 이 두 배의 볼륨으로 반대 방향으로 배치됩니다. 예를 들어, 매수가 설정되면 매도 정지는 매수보다 25포인트 낮고, 매도가 설정되면 매수 정지는 25포인트 높게 설정됩니다. 보류 중인 주문 중 하나가 실행되면 트리거된 주문과 반대 방향으로 첫 번째 오픈 주문 가격으로 다른 보류 중인 주문을 넣습니다. 작동하는 경우 보류 중인 항목을 트리거된 것과 반대 방향으로 25포인트 등의 거리에서 다시 설정하십시오. 따라서 모든 매수 주문은 동일한 가격이어야 하고 모든 매도 주문도 동일한 가격이어야 합니다. 누군가 내가 여기에 쓴 것을 이해한다면 코드를 도와주세요))

 int A = 0 ;
if ( OrdersTotal ()== 0 )
   {
   A = 0 ;
   if ( Close[ 2 ] < Close[ 1 ])
      {
       OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 3 ,Ask- 50 * Point ,Ask+ 25 * Point , 0 , 1 );                 // первый вариант событий
       OrderSend ( Symbol (),OP_SELLSTOP, 2 ,Bid- 25 * Point , 3 ,Bid+ 25 * Point ,Bid- 50 * Point , 0 , 2 );
      A= 1 ;
      }
      
   if ( Close[ 2 ] > Close[ 1 ])
      {
       OrderSend ( Symbol (),OP_SELL, 1 ,Bid, 3 ,Bid+ 50 * Point ,Bid- 25 * Point , 0 , 1 );               //второй вариант событий
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,Ask+ 25 * Point , 3 ,Ask- 25 * Point ,Ask+ 50 * Point , 0 , 2 );
      A= 2 ;
      }
   }
//------------------------------------------------------------------------------------------------------------------+
OrderSelect ( 1 ,SELECT_BY_TICKET,MODE_TRADES);             //цена открытия первого ордера
int price = OrderOpenPrice();
//------------------------------------------------------------------------------------------------------------------+   
int sells = 0 ;                                                                                                                              
for ( int B = 0 ; B < OrdersTotal (); B++)
   {
   OrderSelect (B,SELECT_BY_POS,MODE_TRADES);       //количество ордеров sell
   if (OrderType() == OP_SELL) sells++;
   }
   
int buys = 0 ;                                                                                                                        
for ( int b = 0 ; b < OrdersTotal (); b++)
   {
   OrderSelect (b,SELECT_BY_POS,MODE_TRADES);       //количество ордеров buy 
   if (OrderType() == OP_BUY) buys++;
   }
int sellstops = 0 ;                                                                                                                              
for ( int C = 0 ; C < OrdersTotal (); C++)
   {
   OrderSelect (C,SELECT_BY_POS,MODE_TRADES);       //количество ордеров sellstop
   if (OrderType() == OP_SELL) sellstops++;
   }

int buystops = 0 ;                                                                                                                        
for ( int c = 0 ; c < OrdersTotal (); c++)
   {
   OrderSelect (c,SELECT_BY_POS,MODE_TRADES);       //количество ордеров buystop 
   if (OrderType() == OP_BUY) buystops++;
   }
//-----------------------------------------------------------------------------------------------------------------+
if ( OrdersTotal ()== 1 )
   {                                               //удаление отложенного ордера..
   OrderDelete( 2 );                                 //..который остался после срабатываения tp и sl
   }  
//-----------------------------------------------------------------------------------------------------------------+
if ( OrdersTotal ()> 1 && A == 1 )
   {
   if (sells == buys && buystops == 0 )
      {
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,price, 3 ,price- 50 * Point ,price+ 25 * Point , 0 , 2 );     //условия для первого варианта
      }
   if (buys > sells && sellstops == 0 )
      {
       OrderSend ( Symbol (),OP_SELLSTOP, 2 ,price- 28 * Point , 3 ,price+ 22 * Point ,price- 53 * Point , 0 , 2 );
      }
   }
   
if ( OrdersTotal ()> 1 && A == 2 )
   {
   if (sells == buys && sellstops == 0 )
      {
       OrderSend ( Symbol (),OP_SELLSTOP, 1 ,price, 3 ,price+ 50 * Point ,price- 25 * Point , 0 , 2 );     //условия для второго варианта
      }
   if (buys < sells && buystops == 0 ) 
      {
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,price+ 22 * Point , 3 ,price- 28 * Point ,price+ 47 * Point , 0 , 2 );
      }
   }
//-----------------------------------------------------------------------------------------------------------------+
   
   return ( 0 );
   }
 
artmedia70 :
지표에서 또는 고문에서? 차이가 있습니다. 일반적으로 화살표를 그리지 않으려면 표시기에서 인접한 이전 막대를 확인해야 하며, 0이 아니고 비어 있지 않은 값이 있으면 이미 인접한 막대에 화살표가 있고 거기에 현재 막대의 버퍼에 값을 입력할 필요가 없습니다. 또한 Expert Advisor의 경우 인접한 이전 막대에 현재와 같은 방향으로 교차하는 사실이 이미 기록되어 있고 이 사실이 이미 화살표로 표시되어 있으면 현재 막대에서 교차 사실이 등록되지 않고(존재하는 경우) 화살표도 표시될 수 있으며 필요하지 않습니다.
귀하의 코드에서 다른 것을 제안할 수 없습니다. 근처에 텔레파시가 있으면 제공한 코드를 더 잘 이해할 수 있을 것입니다. ;)

이것은 지표에서 가져온 것입니다. 2 이동 평균의 교차점은 방향을 제공합니다. 나는 잘 이해하지 못했습니다. 방향은 모든 막대가 아닌 건널 때만 제공합니다. 여기서부터는 앞의 막대로 판단하는 것은 불가능하다....말해봐, 어레이를 모으는 건가? 이전 셀을 확인하는 방법? 두 개의 버퍼, 하나 는 CrossUp[i]=Low[i] - Range*0.75, 다른 하나는 Cr[i]=Low[i] + Range*0.75라고 말합니다.
 
zaqwsx123 :

여러분, 코드를 보십시오. 무엇이 잘못되었습니까 ?? 내 첫 번째 조언자는 다음 전략에 따라 작동해야 합니다. 먼저 주문이 열리고(어느 방향으로든, 즉 무작위로 상관 없음) 보류 중인 주문이 두 배의 볼륨으로 반대 방향으로 배치됩니다. 예를 들어, 매수가 설정되면 매도 정지는 매수보다 25포인트 낮고, 매도가 설정되면 매수 정지는 25포인트 높게 설정됩니다. 보류 중인 주문 중 하나가 실행되면 트리거된 주문과 반대 방향으로 첫 번째 오픈 주문 가격으로 다른 보류 중인 주문을 넣습니다. 작동하는 경우 보류 중인 항목을 트리거된 것과 반대 방향으로 25포인트 등의 거리에서 다시 설정하십시오. 따라서 모든 매수 주문은 동일한 가격이어야 하고 모든 매도 주문도 동일한 가격이어야 합니다. 누군가 내가 여기에 쓴 것을 이해한다면 코드를 도와주세요))

당신은 말도 안되는 글을 썼습니다 ... 적어도 이것은 :

 OrderSelect ( 1 ,SELECT_BY_TICKET,MODE_TRADES);             //цена открытия первого ордера

주문이 선택되었습니까? 이 가격이 확실합니까? 주문에 티켓 == 1이 있다고 확신합니까? 티켓으로 선택할 때 은 중요하지 않으므로 MODE_TRADES가 중복됩니다. 티켓 선택에 성공한 후 선택한 주문의 마감 시간도 확인해야 합니다. == 0이면 주문이 시장에 있고 시장 주문 목록에서 선택되고 마감 시간이 > 0이면 주문이 마감되었거나 원격 보류 주문이며 마감 목록에서 선택됩니다. 명령.

코드를 더 자세히 살펴보고 싶지 않을 것입니다. 아마도 먼저 기본 사항에 익숙해져야 할 것입니다. 튜토리얼과 문서를 읽어보세요. 눈에 잘 띄는 곳에 있습니다.

 
artmedia70 :


코드를 더 이상 보고 싶지 않습니다...


내 눈을 사로잡은 것)) 왜 4개의 동일한 주기가 있습니까? 그리고 샘플은 댓글과 다릅니다

 if (OrderType() == OP_BUY) buystops++   //количество ордеров buystop

유사하게 셀스톱과 함께. OP_BUYSTOP 및 OP_SELLSTOP 필요

 
ALXIMIKS :


내 눈을 사로잡은 것)) 왜 4개의 동일한 주기가 있습니까? 그리고 샘플은 댓글과 다릅니다

유사하게 셀스톱과 함께. OP_BUYSTOP 및 OP_SELLSTOP 필요

나는 그것에 도달하지 못했다. 코드를보고 실수를 설명 할 필요가 없다는 것을 알면 단순히 사람이 읽을 수있는 기본부터 가르치기 시작하면 ... 욕망과 욕망이 없습니다. 유료로 공부할 수 있지만 오류 중 코드가 아니라 코드에서 오류를 찾는 데 도움이 되는 곳은 아닙니다.
 
Zolotai :

이것은 지표에서 가져온 것입니다. 2 이동 평균의 교차점은 방향을 제공합니다. 나는 잘 이해하지 못했습니다. 방향은 모든 막대가 아닌 건널 때만 제공합니다. 여기서부터는 앞의 막대로 판단하는 것은 불가능하다....말해봐, 어레이를 모으는 건가? 이전 셀을 확인하는 방법? 두 개의 버퍼, 하나 는 CrossUp[i]=Low[i] - Range*0.75, 다른 하나는 Cr[i]=Low[i] + Range*0.75라고 말합니다.
소스 데이터가 없습니다. 여기에서 검색해 보십시오.
 
실행 전에 삭제된 BUY_STOP 주문이 있습니다.




보안 코드:
             for ( int cnt_1=OrdersHistoryTotal()- 1 ; cnt_1>= 0 ; cnt_1--) {
               if ( OrderSelect (cnt_1, SELECT_BY_POS, MODE_HISTORY)== true ) {
                   if (OrderSymbol()== Symbol ()   &&   OrderCloseTime()!= 0    &&   OrderMagicNumber()==My_Magic_Number ) {
                     Print ( "OrderProfit()=" ,OrderProfit(), "   OrderCloseTime()=" ,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_SECONDS), "   OrderType()=" ,OrderType(), "   OrderTicket()=" ,OrderTicket(), "   OrderClosePrice()=" ,OrderClosePrice(), "   OrderOpenPrice()=" ,OrderOpenPrice() );
                  } // if(OrderSymbol()==Symbol()   &&   OrderCloseTime()!=0   &&   OrderMagicNumber()==My_Magic_Number ) {
               }
            } // for(int cnt_1=0; cnt_1<OrdersHistoryTotal(); cnt_1++) {

결과 라인:
OrderProfit()= 0    OrderCloseTime()= 2001.01 . 26 06 : 15 : 00    OrderType()= 4    OrderTicket()= 24    OrderClosePrice()= 0.9237    OrderOpenPrice()= 0.9419

1, OrderType=4 - "4"가 OP_SELLLIMIT입니까?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - OrderOpenPrice()와 같지 않은 OrderClosePrice()는 어디에서 왔습니까?

 
chief2000 :

실행 전에 삭제된 BUY_STOP 주문이 있습니다.




보안 코드:

결과 라인:

1, OrderType=4 - "4"가 OP_SELLLIMIT입니까?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - OrderOpenPrice()와 같지 않은 OrderClosePrice()는 어디에서 왔습니까?

그리고 당신은 시각화 모드의 테스터에 있습니다. 예, 모든 틱에 대해 단계별 모드(일시 중지의 F12)에서 제거 순간을 찾고 현재 가격을 확인합니다. 아마도 개가 그곳을 뒤졌을까요?
 
artmedia70 :
그리고 당신은 시각화 모드의 테스터에 있습니다. 예, 모든 틱에 대해 단계별 모드(일시 중지의 F12)에서 제거 순간을 찾고 현재 가격을 확인합니다. 아마도 개가 그곳을 뒤졌을까요?


빙고! 나는 몰랐지만 모든 것이 당신이 쓴대로입니다. 이 경우 종가 는 주문이 삭제된 시점의 가격입니다. 고맙습니다!
 

종종 다음과 같이 함수 내부에 유형 변수를 선언했습니다.

 int err = GetLastError ();

더 안쪽으로 어떤 조건에서 오류가 있는지 확인하기 위해 이미 호출합니다. 글쎄, 이것은 나뿐만 아니라 많은 곳에서 내가 만난 코드에 있습니다. 말하자면 전형적인 상황. 오늘은 에러를 제어하고 싶은 모든 함수에서 매번 같은 변수를 선언하는 것은 논리적이지 않다고 생각했습니다. 일단 전역적으로 선언하고 init에서 초기화하는 것이 더 쉬울 것이라는 결론에 이르렀습니다. 이 같은:

 // Объявили на глобальном уровне
int err;

// Инициируем данную переменную:
int init()
{
    err = GetLastError ();
}

그런 다음 사용자 정의 함수에서 err 변수를 호출해야 할 때 이미 값이 있음을 알고 있습니다. 실제로 GetLastError ()마지막 오류 코드를 제공합니다. 즉, 각 함수에서 오류 코드를 표시하고 GetLastError () 호출을 담당하는 이 변수 err이 모든 계산의 끝에서 호출되면 모든 것이 맞아요?

그러나 반면에 전문가 코드 실행 체인을 따라 일부 함수의 끝에서 호출하지 않으면 변수는 0으로 재설정되지 않으며 이는 오류가 있는 경우 잘못된 실행으로 위협합니다. 이전 코드 실행 체인, 하지만 현재 체인에는 없지만 마지막 오류 코드가 반환됩니다... 그리고 재설정하려면 이 GetLastError () 함수를 호출해야 합니다. 저것들. 그것은 모두 그것이 호출되었는지 여부에 달려 있습니다. 어딜가나 이렇게 될 거라는 확신이 없다면, 안전하게 플레이하고 매번 초기화하는 것이 더 쉽겠죠?