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

 
안녕하세요! MQL4를 공부하는 동안 작은 질문이 생겼습니다. 문제는 이 사이트의 교과서에 게시되어 있습니다. 조건은 다음과 같습니다. 작업 25. 다음 조건을 구현하는 프로그램을 작성하십시오. 비율이 지정된 수준 이상으로 상승한 경우 수준 이상(최대 100점)을 단어로 표시하는 메시지를 발행합니다. 다른 경우에는 비율이 지정된 수준을 초과하지 않음을 보고합니다.
제안된 솔루션은 다음과 같습니다.
 //--------------------------------------------------------------------
extern double Level = 1.3200 ;                     // Заданный уровень 
string Text [ 101 ] ;                               // Объявление массива
//--------------------------------------------------------------------
int init ()                                        // Спец. ф-ия init()
   {                                              // Присвоение значений
   Text [ 1 ] = " один " ;             Text [ 15 ] = " пятнадцать " ;
   Text [ 2 ] = " два " ;             Text [ 16 ] = " шестнадцать " ;
   Text [ 3 ] = " три " ;             Text [ 17 ] = " семнадцать " ;
   Text [ 4 ] = " четыре " ;           Text [ 18 ] = " восемнадцать " ;
   Text [ 5 ] = " пять " ;             Text [ 19 ] = " девятнадцать " ;
   Text [ 6 ] = " шесть " ;           Text [ 20 ] = " двадцать " ;
   Text [ 7 ] = " семь " ;             Text [ 30 ] = " тридцать " ;
   Text [ 8 ] = " восемь " ;           Text [ 40 ] = " сорок " ;
   Text [ 9 ] = " девять " ;           Text [ 50 ] = " пятьдесят " ;
   Text [ 10 ] = " десять " ;         Text [ 60 ] = " шестьдесят " ;
   Text [ 11 ] = " одиннадцать " ;     Text [ 70 ] = " семьдесят " ;
   Text [ 12 ] = " двенадцать " ;     Text [ 80 ] = " восемьдесят " ;
   Text [ 13 ] = " тринадцать " ;     Text [ 90 ] = " девяносто " ;
   Text [ 14 ] = " четырнадцать " ;   Text [ 100 ] = " сто " ;
   // Вычисление значений
   for ( int i = 20 ; i <= 90 ; i = i + 10 )                  // Цикл по десяткам
     {
       for ( int j = 1 ; j <= 9 ; j ++ )                    // Цикл по единицам
         Text [ i + j ] = Text [ i ] + Text [ j ] ;           // Вычисление значения   
     }
   return ;                                     // Выход из init()
   }
//--------------------------------------------------------------------
int start ()                                      // Спец. ф-ия start()
   {
   int Delta = NormalizeDouble (( Bid - Level ) / Point , 0 ) ; // Превышение 
//--------------------------------------------------------------------
   if ( Delta >= 0 )                                  // Цена не выше уровня
     {
       Alert ( " Цена ниже уровня " ) ;                 // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if ( Delta < 100 )                                // Цена более 100
     {
       Alert ( " Более ста пунктов " ) ;               // Сообщение
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert ( " Плюс " , Text [ Delta ] , " pt. " ) ;             // Вывод на экран
   return ;                                       // Выход из start()
   }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Step :
안녕하세요! MQL4를 공부하는 동안 작은 질문이 생겼습니다. 문제는 이 사이트의 교과서에 게시되어 있습니다. 조건은 다음과 같습니다. 작업 25. 다음 조건을 구현하는 프로그램을 작성하십시오. 비율이 지정된 수준 이상으로 상승한 경우 수준 이상(최대 100점)을 단어로 표시하는 메시지를 발행합니다. 다른 경우에는 비율이 지정된 수준을 초과하지 않음을 보고합니다.
제안된 솔루션은 다음과 같습니다.


가능한 솔루션이 표시됩니다. 학습에 유용합니다.

다른 옵션이 있습니다. 다른 오류가 있습니다.

자신을 더 믿으세요. 실험.

 
Step :
안녕하세요! MQL4를 공부하는 동안 작은 질문이 생겼습니다. 과제는 이 사이트의 교과서에 게시되어 있습니다. 조건은 다음과 같습니다. 작업 25. 다음 조건을 구현하는 프로그램을 작성하십시오. 비율이 지정된 수준 이상으로 상승한 경우 수준 이상(최대 100점)을 단어로 표시하는 메시지를 발행합니다. 다른 경우에는 비율이 지정된 수준을 초과하지 않음을 보고합니다.
제안된 솔루션은 다음과 같습니다.


추신

특히, 배열 작업에서 이 예제의 유용성은,

단어로 데이터의 가능한 표현,

NormalizeDouble 함수와 미리 정의된 변수 Point를 사용합니다.

취미를 더 쉽게 선택할 수 있는 기회.

 

분명히 클래스 자체에는 외부 변수를 직접 선언할 수 있는 방법이 없습니다. 그렇다면 옵션은 무엇입니까? 이 클래스를 사용할 때만 필요한 이러한 외부 특정 변수를 EA 자체 또는 다른 곳에서 선언하고 싶지 않은 경우. 내가 이해하는 한 유일한 옵션은 이러한 외부 변수가 선언되는 포함을 만드는 것입니다. 그리고 거기에 클래스도 포함시키겠죠?

그런 다음 클래스를 호출하려면 이미 클래스를 직접 포함하는 포함자를 포함해야 합니다. 그래서? 아니면 다른 옵션이 있습니까?

제가 보기에는 별로 좋지 않습니다. 생성할 중첩 파일 포함 ... 그래서 질문이 이것입니다.

아니면 일반 라이브러리에서처럼 클래스를 선언하고 필요한 라이브러리를 가져오기 전에 외부 변수를 선언하는 것이 여전히 가능합니까? 내 말은 다음과 같습니다.

 // Объявляем внешние переменные
extern type Var1;
extern type Var2;
extern type Var3;

// Подключаем требуемые библиотеки
//#include <LBase.mqh>
//+---
//#include <Logging.mqh>
#import "user32.dll"
     int GetAncestor;
     int PostMessageA;
#import
//
class CLogging
{
   protected :
 // защищенные данные
   public :
 // открытые данные
};
나는 이것을 보지 못했다. 그래서 제가 제대로 가고 있는지 궁금합니다..
 
표시기 코드를 Expert Advisor로 전송하면 오류가 발생합니다. 코드 부분에서 0 나누기

if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);



Comment를 통해 터미널 화면에 전역 변수로 표시했습니다. 0은 없었고 음수만 있었습니다. 그런 다음 변경

//---- indicator buffers
double zz[1500];

//---- indicator buffers
double zz[300];
모든 것이 제자리에 떨어졌고 다시 돌아왔습니다. 오류가 없습니다! 이유는 무엇입니까? Inet은 아직 꺼져 있습니다.
 
semargl988 :

표시기 코드를 Expert Advisor로 전송하면 오류가 발생합니다. 코드 부분에서 0 나누기

...

Comment를 통해 터미널 화면에 전역 변수로 표시했습니다. 0은 없고 음수만 있었습니다. 그런 다음 변경

...

...

모든 것이 제자리에 떨어졌고 다시 돌아왔습니다. 오류가 없습니다! 이유는 무엇입니까? Inet은 아직 꺼져 있습니다.

나는 또한 분수의 분모에 0을 전달할 수 없는 " 0 나누기 " 오류가 발생했습니다. 이제 나누기 전에 형식 검사를 수행합니다.

 if (znamenatel== 0 )
{
 какое-то действие;
}

그리고 오류가 사라졌습니다. 저것들. 프로그래머가 0이 없다고 100% 확신하더라도 분모 = 0인 경우 컴파일러는 수행할 작업에 대한 지침을 받아야 합니다.

 

안녕하세요, 코드를 도와주세요. 나는 조언자가 수직(즉, 가격이 아닌 시간이 아닌) 라인에 접근할 때 기본적인 오픈 포지션 을 수행해야 합니다. 내가 이해하는 대로 - 2분. 선의 색상이 매수인지 매도인지를 결정해야 합니다. 인터넷에서 검색하고 다시 작성해 보니 다음과 같은 결과가 나왔습니다.

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

그래서 그는 어떤 이유로 거래를 하지 않습니다. 로그에 오류가 없습니다...
 
dmitriyriy666 :

안녕하세요, 코드를 도와주세요. 나는 조언자가 수직(즉, 가격이 아닌 시간이 아닌) 라인에 접근할 때 기본적인 오픈 포지션을 수행해야 합니다. 내가 이해하는 한 - 2분. 선의 색상이 매수인지 매도인지를 결정해야 합니다. 인터넷에서 검색하고 다시 작성해 보니 다음과 같은 결과가 나왔습니다.

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal() )
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY" ;}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL" ;}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

그래서 그는 어떤 이유로 거래를 하지 않습니다. 로그에 오류가 없습니다...

컴퓨터 시간이 터미널 시간과 일치하면 TimeLocal ()을 사용할 수 있지만 여전히 TimeCurrent () 보다 안정적입니다.

Operacia 변수의 유형을 int로 변경하고 따옴표 OP_BUY 및 OP_SELL을 제거하십시오.

 
AlexeyVik :

컴퓨터 시간이 터미널 시간과 일치하면 TimeLocal ()을 사용할 수 있지만 여전히 TimeCurrent () 보다 안정적입니다.

Operacia 변수의 유형을 int로 변경하고 따옴표 OP_BUY 및 OP_SELL을 제거하십시오.



고맙습니다. TimeCurrent에 대해 이것은 확실합니다. 제 시간은 서버 시간과 일치하지 않습니다. 고쳤는데 여전히 안되네요... 로그에 오류가 하나도 안남.


추신 이전 글에서는 어떤 이유로 공백이 없는 코드를 삽입했습니다. 그러나 나는 모든 중괄호가 올바르게 배치된 것을 좋아합니다.

 

MT4 - 625, 라이브러리로 올빼미를 테스트하려고 할 때 테스터의 메시지:

2014.03.29 18:38:48.753 'C:\Program Files\Admiral1\MQL4\Libraries\ingLib094.mq4' 는 32비트 버전이 아닙니다 .

그전에는 부엉이도 걸림없이 컴파일했고, 라이브러리도 말 한마디 없이. 그리고 전혀 이해가 되지 않습니다.

내 시스템(Windows의 의미에서)은 32비트이고 다른 시스템은 유지한 적이 없습니다. 일곱.

도서관은 어디까지나 내 것입니다. 일반적으로 새 빌드에서 실시간으로 진행됩니다. 다른 올빼미도 포함됩니다. 그리고 문제없이 이전 버전의 테스터에서.

그러나 테스터에서는 열기를 원하지 않고 손가락에서 이유를 빨아들였습니다.

그리고 모든 도움말 페이지에 32비트 사례에 대한 단어가 없습니다.