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

 
네.
 
Roger :
네.
:) 이제 오류 130 이 나타났습니다. 가장 이해할 수 없는 것은 잘못된 정류장(130)으로 여전히 정확한 테이크를 설정하고(ATR로 계산) 내 정류장이 처음에 설정되지 않았다는 것입니다...
이것은 어떻게 든 이해할 수 있습니까?
 
b0r1s :

도움이 필요하다!!! 히스토리에서 마지막 손실 주문을 선택하는 방법???


 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       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)) {
     if (OrderProfit()< 0 ) return (True);
  }
   return (False);
}

 if (isLossLastPos( NULL , - 1 , Magic искомого ордера )) {нашли - обрабатываем...}
 
ToLik_SRGV :

당신에게는 너무 복잡합니다 :)
여기 내 코드가 있습니다

지연된 마술사와 원하는 노예를 매개 변수로 메서드에 전달합니다.

귀하의 함수가 오류 1(재미: 오류 1 = 오류 없음, 그러나 결과는 알 수 없음)을 발생시키고 추적하지 않는 이유를 알 수 없습니다. 때때로 일부 스레드가 지연기를 잡는 일이 발생하지만 대부분 >>>ERROR1 로그에 있고 정상이며 기침하지 마십시오...

나는 이렇게 부른다.

 //==============================================================================================
   // Модификация ордеров
//============================================================================================== 
   int criterion = TakeProfitATR ( 1 );                // Рассчитываем "достаточную" волатильность
   if (criterion>= 15 ) trailingOrder( 511 , 20 );        // и если она в "норме" - тралим ордера...
//==============================================================================================

// Функция для рассчёта Take Profit по ATR

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR ( int tf)
  {
   double    atr   = iATR ( NULL ,tf, 14 , 0 );
   double    mltp  = 15000 ;
   if (tf== 1 ) mltp= 15000 ;
   if (tf== 5 ) mltp= 45000 ;
   double    tp    = MathRound (atr*mltp);
   return   (tp);
  }
 
artmedia70 :

귀하의 함수가 오류 1(재미: 오류 1 = 오류가 없지만 결과는 알 수 없음)을 발생시키고 추적하지 않는 이유를 알 수 없습니다. 때때로 일부 스레드가 지연기를 잡는 일이 발생하지만 대부분 >>>ERROR1 로그에 있고 정상이며 기침하지 마십시오...

나는 이렇게 부른다.


이 때문에 오류 1이 나타날 수 있습니다(OrderModify()에 대한 문서에서).

변경되지 않은 값이 함수 매개변수로 전달되면 이 경우 오류 1(ERR_NO_RESULT)이 생성됩니다.

정상입니다. 정말 오류가 없습니다. 무시하셔도 됩니다.
 
artmedia70 :

귀하의 함수가 오류 1(재미: 오류 1 = 오류가 없지만 결과는 알 수 없음)을 발생시키고 추적하지 않는 이유를 알 수 없습니다. 때때로 일부 스레드가 지연기를 잡는 일이 발생하지만 대부분 >>>ERROR1 로그에 있고 정상이며 기침하지 마십시오...

나는 이렇게 부른다.


지정가 주문 추가(이전 코드에서 잊어버렸습니다 :)) + 오류 처리 #1(수정하기 전에 새 가격이 현재 가격과 비교되고 동일하면 아무 것도 하지 않음):

 //+------------------------------------------------------------------+
void trailingOrder( int magic, int trailing){
   int index = 0 ;
   while (trailing > 0 && OrdersTotal () != 0 && OrderSelect (index, SELECT_BY_POS)){
      if (OrderMagicNumber() == magic){
         if (OrderType() == OP_BUYSTOP){
            if (OrderOpenPrice() - Ask > Point *trailing){
               if ((Ask+ Point *trailing) - Ask >= MarketInfo( Symbol (), MODE_STOPLEVEL)* Point &&
                 (Ask+ Point *trailing) - Ask > MarketInfo( Symbol (), MODE_FREEZELEVEL)* Point &&
                 (Ask+ Point *trailing) != OrderOpenPrice()){
                  if (!OrderModify(OrderTicket(),Ask+ Point *trailing,OrderStopLoss(),OrderTakeProfit(), 0 )) Print ( ">>> ERROR " , GetLastError ());
               } else {
                  Print ( ">>> Слишком близко к рынку или передано неизмененное значение!" );
               }
            }
            return ;
         }
         if (OrderType() == OP_SELLSTOP){
            if (Bid - OrderOpenPrice() > Point *trailing){
               if (Bid - (Bid- Point *trailing) >= MarketInfo( Symbol (), MODE_STOPLEVEL)* Point &&
                 Bid - (Bid- Point *trailing) > MarketInfo( Symbol (), MODE_FREEZELEVEL)* Point &&
                 (Bid- Point *trailing) != OrderOpenPrice()){
                  if (!OrderModify(OrderTicket(),Bid- Point *trailing,OrderStopLoss(),OrderTakeProfit(), 0 )) Print ( ">>> ERROR " , GetLastError ());
               } else {
                  Print ( ">>> Слишком близко к рынку или передано неизмененное значение!" );
               }
            }
            return ;
         }
         if (OrderType() == OP_SELLLIMIT){
            if (OrderOpenPrice() - Bid > Point *trailing){
               if ((Bid+ Point *trailing) - Bid >= MarketInfo( Symbol (), MODE_STOPLEVEL)* Point &&
                 (Bid+ Point *trailing) - Bid > MarketInfo( Symbol (), MODE_FREEZELEVEL)* Point &&
                 (Bid+ Point *trailing) != OrderOpenPrice()){
                  if (!OrderModify(OrderTicket(),Bid+ Point *trailing,OrderStopLoss(),OrderTakeProfit(), 0 )) Print ( ">>> ERROR " , GetLastError ());
               } else {
                  Print ( ">>> Слишком близко к рынку или передано неизмененное значение!" );
               }
            }
            return ;
         }
         if (OrderType() == OP_BUYLIMIT){
            if (Ask - OrderOpenPrice() > Point *trailing){
               if (Ask - (Ask- Point *trailing) >= MarketInfo( Symbol (), MODE_STOPLEVEL)* Point &&
                 Ask - (Ask- Point *trailing) > MarketInfo( Symbol (), MODE_FREEZELEVEL)* Point &&
                 (Ask- Point *trailing) != OrderOpenPrice()){
                  if (!OrderModify(OrderTicket(),Ask- Point *trailing,OrderStopLoss(),OrderTakeProfit(), 0 )) Print ( ">>> ERROR " , GetLastError ());
               } else {
                  Print ( ">>> Слишком близко к рынку или передано неизмененное значение!" );
               }
            }
            return ;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 

그건 그렇고, 나는 보류중인 사용자에 대한 StopLevel 및 FreezeLevel 거리에 대한 자습서에서 오류를 발견했습니다.

최소 거리 StopLevel에 대한 제한.

지정된 요구 사항 중 하나라도 위반되면 거래 작업 이 수행되지 않습니다.

주문 유형 주문 시가(OpenPrice) 손절매(SL) 이익실현(TP)
구입
수정 금지 Bid-SL StopLevel TP-Bid StopLevel
팔다
수정 금지 SL-Ask StopLevel Ask-TP StopLevel
구매한도
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
Bid-OpenPrice ≥ StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel
구매 중지
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
판매 중지
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

SellLimit은 현재 가격보다 높게 설정되어 있으므로 다음과 같이 정확합니다.

OpenPrice - Bid ≥ StopLevel

 
서로 50 포인트 거리에서 두 개의 반대 주문을 여는 방법은 무엇입니까?
 

화면 하단의 탭에서 도구를 정렬하는 방법이 있습니까? 그렇지 않으면 4개의 시간대에 있는 8개의 악기가 무질서하게 흩어집니다....

 
Rossi :

화면 하단의 탭에서 도구를 정렬하는 방법이 있습니까? 그렇지 않으면 4개의 시간대에 있는 8개의 악기가 무질서하게 흩어집니다....


차트 이름이 있는 탭을 클릭하고 원하는 위치로 끕니다.