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

 

Indicator7 폴더에 올바르게 복사합니다.

 
hoz :

다음과 같은 상황이 있습니다.

오해가 있었던 부분을 코드로 보여줬습니다. 모든 변수는 전역으로 선언됩니다. IsObjectFound() 함수에서 현재 막대에 있는 개체의 첫 번째 및 두 번째 가격 포인트 값, 이름 및 개체 가격 값을 가져옵니다. 객체가 발견되면 함수는 true 모드에서 종료되어야 하고 그렇지 않으면 false 입니다.


시작 기능의 실행은 계속됩니다. 이게 뭔가요?

무언가가 작동하지 않으면 디버그 출력에 욕심을 내지 말고 더 많은 오류를 확인하십시오. 작업 스크립트 예:

 //+------------------------------------------------------------------+
//|                                             Test ObjectFound.mq4 |
//|                                         Copyright © 2013, ir0407 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, ir0407"
#property link       ""

#include <stderror.mqh>
#include <stdlib.mqh>

string objName;
int isObj;
double objPrice1, objPrice2, objPriceCurr; 

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound())
   {
       Print ( "В окне отсуствуют объекты, поиск продолжается..." );
       return ( 0 );
   }
   return ( 0 );
}
//+------------------------------------------------------------------+

//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound( int ObjType = EMPTY)
{
   int Error;
   //Eсли объектов на графике нет, то и делать нам тут больше нечего
   if ( ObjectsTotal (ObjType) == 0 )
   {
       Print ( "Объекты на графике отсутствуют." );
       return (False);
   }
   for ( int obj = 0 ; obj < ObjectsTotal (ObjType); obj++)
   {
      objName = ObjectName (obj);
       //Нужно убедиться что в переменной objName лежит имя объекта,
       //а не какая нибудь чепуха.
      Error = GetLastError ();
       if (Error == ERR_NO_ERROR)
      {
        isObj = ObjectFind (objName);
         if (isObj == - 1 )
        {
           Print ( "Объект с именем \"" , objName, "\" не найден." );
          Error = GetLastError ();
           Print ( "Функция ObjectFind() вернула код ошибки #" , Error);
           return ( false );
        }
        objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
        objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
        objPriceCurr = ObjectGetValueByShift(objName, 0 );
         Print ( "objPrice1 = " , objPrice1);
         Print ( "objPrice2 = " , objPrice2);
         Print ( "objPriceCurr = " , objPriceCurr);
      }
       else
      {
         Print ( "Функция ObjectName() вернула код ошибки #" , Error);
         return ( false );
      }
   }
   return (True); // Объект найден!
}
 
ir0407 :

무언가가 작동하지 않으면 디버그 출력에 욕심을 내지 말고 더 많은 오류를 확인하십시오. 작업 스크립트 예:



Igor , 소중한 의견 감사합니다. 네가 옳아! 이전에 개체 작업을 해본 적이 없었는데 이제는 익숙해지고 있습니다. 어느 쪽에 다가가야할지 고민하다가..
 
GaNDarM :


당신은 오해했다. 터미널에서 잔액 값을 변경하고 싶지는 않지만 실제로 나쁘지는 않습니다. :)

이전 거래의 결과(손익)에 따라 로트 크기를 변경해야 합니다. 그리고 나는 예금의 변경 사항을 등록하는 방법을 모릅니다 (그는 손실을 입거나 이익을 얻었습니다).

2가지 방법으로 거래 결과를 제어할 수 있습니다(다른 방법이 있을 수 있음).
1) 예금의 이전 값을 기억하고 현재 값(AccountBalance())과 비교합니다. 그러나 이 방법 의 경우 터미널의 전역 변수 를 사용해야 EA가 또는 터미널이 다시 시작됩니다(또는 파일에 쓰기).

2) 또는 이력에서 이전 거래의 결과를 확인할 수 있습니다(김의 지점에서 기능 찾기).

 
koSTRIKin :

Indicator7 폴더에 올바르게 복사합니다.

전문가/지표를 수정하십시오. 만일의 경우를 대비하여 녹음 후 폴더에 존재하는지 확인하십시오.

거기에 있으면 편집기에서 코드를 컴파일한 후에 확실히 나타납니다.

 
      objName = ObjectName (obj);
       //Нужно убедиться что в переменной objName лежит имя объекта,
       //а не какая нибудь чепуха.
      Error = GetLastError ();
       if (Error == ERR_NO_ERROR)
함수가 구체적으로 객체의 이름을 반환한다면 어디에서 넌센스가 있을까요?
 

간담

(функцию поищите в ветке у Кима). 

나뭇가지
 
TarasBY :

2가지 방법으로 거래 결과를 제어할 수 있습니다(다른 방법이 있을 수 있음).
1) 예금의 이전 값을 기억하고 현재 값(AccountBalance())과 비교합니다. 그러나 이 방법의 경우 터미널의 전역 변수를 사용해야 EA가 또는 터미널이 다시 시작됩니다(또는 파일에 쓰기).

2) 또는 이력에서 이전 거래의 결과를 확인할 수 있습니다(김의 지점에서 기능 찾기).


감사합니다 찾아보겠습니다
 

INIT() 함수에서 변수에 0이 할당되는 이유는 무엇입니까? start() 함수 외부의 변수에 구매 가격과 판매 가격의 값을 할당하는 오류 또는 방법은 무엇입니까? RefreshRates();를 앞에 넣어봤는데 변화가 없네요 :(

 int init()
  {
   .....
   //---
   UpL  =  Ask;     // Пик вверх изначально равен цене покупки
   DownL  =  Bid;     // Пик вниз изначально равен цене продажи
   
   return ( 0 );
  }
//---end init--------------------------------------------------------
 

인사말!

프로그래밍 방식 으로 막대 수 값을 구하는 방법을 설명하십시오.