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

 

안녕하세요, 저는 이 질문에 관심이 있습니다. alpari 는 24시간 근무한 고문을 삭제할 수 있는 서버를 제공합니까? 비공개로 답변 부탁드립니다.

 
gheka :

뭔가 작동하지 않습니다. 여기에서 무언가를 변경하거나 시작 후에 넣어야 할 수도 있습니다.

종이에 있는 코드를 내가 이해할 수 있는 언어로 러시아어로 번역하려고 했지만 도달하지 못했습니다.

너무 복잡합니다. 특히 각 후속 조건의 조건이 8개 조건 중 하나인 경우

물론 그런 코드를 만든 사람이 단순히 기적이라고 주장하는 것은 아니지만 나에게 이것은 완전한 변태(좋은 의미에서)입니다.

표준 기능을 제외하고 각 작업과 조건에 주석을 추가하는 데 너무 게으르지 않은 사람.


코드에 약간의 중복성이 있지만 코드는 꽤 읽을 수 있습니다.

 
프로그램에서 기간 변경에 대한 질문 ... 예를 들어, 다른 기간에 적용해야 하는 특정 순서의 연산자 가 있습니다. .. 제가 알기로는 주기 형식으로 하는 것이 더 쉽습니다. .. 마침표 변경 ... 문서에서 마침표 값을 반환하는 함수를 찾았습니다 .. 하지만 이를 변경할 함수를 찾지 못했습니다... 제가 무엇을 잘못 이해하고 있습니까?
 

뭔가 당신과 함께 쟁기질하지 않지만이 코드는 아닙니다 ... :)

 bool isCloseLastPosByStop( string sy= "" , int op=- 1 , int mn=- 1 ) { // Объявление функции. Передаваемые параметры: sy = символ, op - тип, mn - магик
   datetime t;                                                  // Переменная содержит время закрытия ордера
   double    ocp, osl;                                           // ocp - цена закрытия позиции, osl - цена СтопЛосс закрытой позиции
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();                // k содержит общее количество ордеров в истории

   if (sy== "0" ) sy= Symbol ();                                 // Если в ф-цию передан sy равный 0 или NULL, то использовать символ графика
   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) {                // ... если тип ордера равен или -1 (имеется ввиду любой) или равен переданному в ф-цию, ...
             if (mn< 0 || OrderMagicNumber()==mn) {       // ... если его магик или любой (-1) или равен переданному в ф-цию (магику советника), ...
               if (t<OrderCloseTime()) {    // ... если переменная t содержит время закрытия меньше, чем время закрытия выбранного ордера, то ...
                t=OrderCloseTime();        // ... то присвоим переменной t время закрытия выбранного ордера (этот ордер закрыт позже предыдущего)
                j=i;                                        // Запишем в переменную j индекс найденного ордера с максимальным временем закрытия
              }
            }
          }
        }
      }
    }
  }                                                       // По окончании цикла в переменной j находится индекс последнего закрытого ордера
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {      // Выберем его по индексу
    dg=MarketInfo(sy, MODE_DIGITS);                       // Количество цифр после десятичного точки в цене инструмента, заданного переменной sy
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ; // Честно... точно не скажу, но вижу, что корректировка под йену
    ocp= NormalizeDouble (OrderClosePrice(), dg);           // Нормализуем цену закрытия ордера для дальнейшего сравнения с ценой СтопЛосс
    osl= NormalizeDouble (OrderStopLoss(), dg);             // Нормализуем цену СтопЛосс ордера для сравнения с ценой закрытия
     if (ocp==osl) return (True);                           // Если эти цены равны, значит поза закрыта по стопу, возвращаем значение "Истина"
  }
   return (False);                                          // Возвращаем "Ложь"
}

그것이 전체 논리입니다 ... Victor는 올바르게 말했습니다 - 중복되지만 가능한 한 간단합니다 ... :)

 
Skopcheny :
프로그램에서 기간 변경에 대한 질문 ... 예를 들어, 다른 기간에 적용해야 하는 특정 순서의 연산자가 있습니다. .. 제가 알기로는 주기 형식으로 하는 것이 더 쉽습니다. .. 마침표 변경 ... 문서에서 마침표 값을 반환하는 함수를 찾았습니다 .. 하지만 이를 변경할 함수를 찾지 못했습니다... 제가 무엇을 잘못 이해하고 있습니까?

차트 기간 은 다음 값 중 하나일 수 있습니다.

끊임없는 의미 설명
PERIOD_M1 하나 1 분
PERIOD_M5 5 5 분
PERIOD_M15 열 다섯 15 분
PERIOD_M30 서른 30 분
PERIOD_H1 60 1 시간
PERIOD_H4 240 4 시간
PERIOD_D1 1440 1 일
PERIOD_W1 10080 일주
PERIOD_MN1 43200 1 개월
0(영) 0 현재 차트 기간
 
대단히 감사합니다. 설명이 필요합니다 ... 연산자 그룹이 특정 기간 동안 작동하려면 앞에 표시되는 형식으로 마침표 중 하나를 표시하는 것만으로도 충분합니다 이 테이블?
 
Skopcheny :
대단히 감사합니다. 설명이 필요합니다 ... 연산자 그룹이 특정 기간 동안 작동하려면 앞에 표시되는 형식으로 마침표 중 하나를 표시하는 것만으로도 충분합니다 이 테이블?
귀하의 질문에 올바르게 대답하려면 적어도 기간을 구체적으로 설정해야 하는 코드 예제를 보아야 합니다...
 
artmedia70 :
귀하의 질문에 올바르게 대답하려면 적어도 기간을 구체적으로 설정해야 하는 코드 예제를 보아야 합니다...


문자열 추세()
{int count,count_change;
더블 바 센터;
문자열 추세;
부울 클리어;
(int i=10;i!=0;i--)
{
bar_centr = (높음[i]-낮음[i])/2+낮음[i];
if (bar_centr>((높음[i+1]-낮음[i+1])/2+낮음[i+1]))
카운트++;

if (bar_centr<((높음[i+1]-낮음[i+1])/2+낮음[i+1]))
세다--;
}

인쇄(count,"period ", Period() );


if (count>3) trend="구매";
if (count<-3) 경향="판매";
if (count<3||count>-3) trend="불확실성";





반환(추세);}

이 기능은 서로 다른 기간에 순차적으로 적용해야 합니다 ... 터미널의 창에 어드바이저를 기간이 다른 창에 연결하면 작동합니다 ... 어드바이저 자체가 여러 다른 기간을 처리 할 수 있느냐가 문제입니다 ...

 
Skopcheny :


이 기능은 서로 다른 기간에 순차적으로 적용해야 합니다 ... 터미널의 창에 어드바이저를 기간이 다른 창에 연결하면 작동합니다 ... 어드바이저 자체가 여러 다른 기간을 처리 할 수 있느냐가 문제입니다 ...

제가 알기로는 현재 차트와 기간 뿐만 아니라 전달받은 차트와 함께 작동하려면 함수가 필요합니다...

 string trend( string sy= "" , int tf= 0 )
{
   int count,count_change;
   double bar_centr;
   string trend;
   bool clear;

   if (sy== "" || sy== "0" ) sy= Symbol ();      
   if (tf== 0 ) tf= Period ();
   
   for ( int i= 10 ; i> 0 ; i--)
      {
         bar_centr = (iHigh(sy,tf,i)-iLow(sy,tf,i))/ 2 +iLow(sy,tf,i);
         if (bar_centr>((iHigh(sy,tf,i+ 1 )-iLow(sy,tf,i+ 1 ))/ 2 +iLow(sy,tf,i+ 1 )))
            count++;
         if (bar_centr<((iHigh(sy,tf,i+ 1 )-iLow(sy,tf,i+ 1 ))/ 2 +iLow(sy,tfi+ 1 )))
            count--;
      }

   Print (count, "период " , tf );

   if (count> 3 ) trend= "покупка" ;
   if (count<- 3 ) trend= "продажа" ;
   if (count< 3 ||count>- 3 ) trend= "неопределенность" ;

   return (trend);
}

이제 다음과 같이 함수를 호출하십시오.

추세(기호(), 기간()); // Expert Advisor가 정지된 차트 및 기간에 대한 값을 반환합니다...

추세(USDJPY, PERIOD_D1); // USDJPY 기호 및 "1일" 기간에 대한 값을 반환합니다.

PERIOD_D1 대신 1440을 입력할 수 있습니다.

매개변수 없이 호출되면 함수는 현재 기호 및 기간에 대한 값을 반환합니다(기본적으로 설정됨)

 
artmedia70 :

제가 알기로는 현재 차트와 기간 뿐만 아니라 전달받은 차트와 함께 작동하려면 함수가 필요합니다...

이제 다음과 같이 함수를 호출하십시오.

추세(기호(), 기간()); // Expert Advisor가 정지된 차트 및 기간에 대한 값을 반환합니다...

추세(USDJPY, PERIOD_D1); // USDJPY 기호 및 "1일" 기간에 대한 값을 반환합니다.

PERIOD_D1 대신 1440을 입력할 수 있습니다.




철저한 답변... 감사합니다...