paladin80 : 프로그램 실행 자원의 비용을 줄이는 측면에서 변수의 유형(int, double 등)을 선언하는 것이 더 나은 곳은 어디입니까? 예. int i는 전역 수준에서 선언하거나 int start() ... in for (int i=OrdersTotal()-1; i>=0; i--) ... 선언할 수 있습니다. 각 틱에 대해 extern 매개변수 직후에 전역 수준에서 한 번보다 더 비쌉니다. 아니면 자원 집약도의 차이가 동일한가요?
어쨌든 모든 변수(메모리의 변수를 위한 장소)는 프로그램 시작 시 한 번 생성되며, 그 변수는 텍스트에서 발생한 장소( 변수 선언 )에서 초기화되어야 하지만 항상 일어나는 것은 아니며, 따라서 모든 것이 제대로 작동하도록 하려면 선언할 때 명시적으로 초기화하는 것을 잊지 마십시오. 속도에 영향을 미치지 않으면 최소한 사이클 내부에서 선언할 수 있습니다.
귀하의 코드에 따라 코드가 수정되었습니다. 테스트하는 동안 첫 번째 틱, 다섯 번째 - 다음 틱에 배치 순서대로 4개의 주문이 마감되었습니다. 여기에 다른 문제가 있을 수 있습니다. 반복적으로 테스트했습니다. 테스터 로그의 프로그램 코드와 항목이 제공됩니다. 감사합니다. 쉬르킨
공습 경보 해제. 바꾸다
for (i= 0 , int k= 0 ; i< OrdersTotal ();i++,k++) //
에
int total= OrdersTotal ();
for (i= 0 , int k= 0 ; i<total;i++,k++) //
//+-------------------------------------------------------------------------------------+//| Блок поиска своих объектов |//+-------------------------------------------------------------------------------------+bool IsObjectFound()
{
for ( int obj= 0 ; obj<= ObjectsTotal ()- 1 ; obj++)
{
objName = ObjectName (obj);
isObj = ObjectFind (objName);
objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
objPriceCurr = ObjectGetValueByShift(objName, 0 );
}
Print ( "objPriceCurr = " , objPriceCurr);
if (isObj != - 1 ) // Если объект найден, значит выходим из функцииreturn ( true );
return ( false ); // Объект не найден!
}
//+-------------------------------------------------------------------------------------+//| Функция start |//+-------------------------------------------------------------------------------------+int start()
{
int signal = GetSignal();
if (IsObjectFound() == false )
{
Print ( "В окне отсуствуют объекты, поиск продолжается..." );
return ( 0 );
}
오해가 있었던 부분을 코드로 보여줬습니다. 모든 변수는 전역으로 선언됩니다. IsObjectFound() 함수에서 현재 막대에 있는 개체의 첫 번째 및 두 번째 가격 포인트 값, 이름 및 개체 가격 값을 가져옵니다. 객체가 발견되면 함수는 true 모드에서 종료되어야 하고 그렇지 않으면 false 입니다.
전역 변수 - 전역 조회. 데이터 모델을 보지 않고 알고리즘에 대해 무엇을 말할 수 있습니까?
데이터를 추적하겠습니다. isObj는 부울이고 그 모든 것은...
//+-------------------------------------------------------------------------------------+//| TradingByLine.mq4 |//| hoz |//| |//+-------------------------------------------------------------------------------------+#property copyright "hoz"#property link ""externstring ___H0 = "Параметры отклонений зоны сигнала" ;
externdouble dernovich = 40 ,
faustUs = 40 ;
/*extern double limitOverLine = 3,
limitUnderLine = 20;*/string objName; // Имя объектаint isObj; // Возвращает окно, которому принадлежит// ..наденнный объект, либо -1double objPrice1, // Первая координата цены луча
objPrice2, // Вторая координата цены луча
objPriceCurr; // Цена объекта на заданном бареint pt;
#define SIGNAL_BUY 0// Сигнал на покупку#define SIGNAL_SELL 1// Сигнал на продажу#define SIGNAL_NO - 1// Сигнала нет//+-------------------------------------------------------------------------------------+//| Функция иницилизации |//+-------------------------------------------------------------------------------------+int init()
{
if ( Digits == 2 || Digits == 4 )
pt = Point ;
if ( Digits == 1 || Digits == 3 || Digits == 5 )
pt = Point * 10 ;
if ( Digits == 6 )
pt = Point * 100 ;
if ( Digits == 7 )
pt = Point * 1000 ;
return ( 0 );
}
//+-------------------------------------------------------------------------------------+//| Функция деиницилизации |//+-------------------------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+-------------------------------------------------------------------------------------+//| Сигнализатор касания о луч |//+-------------------------------------------------------------------------------------+bool AlertByTouching( int signal)
{
double priceDevBefore,
priceDevAfter;
if (signal == SIGNAL_SELL)
{
priceDevAfter = objPriceCurr + faustUs * pt;
priceDevBefore = objPriceCurr - dernovich * pt;
if (Bid <= priceDevAfter && Bid >= priceDevBefore)
{
Print ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься продавать!" );
Alert ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься продавать!" );
return ( true );
}
}
if (signal == SIGNAL_BUY)
{
priceDevAfter = objPriceCurr - faustUs * pt;
priceDevBefore = objPriceCurr + dernovich * pt;
Print ( "priceDevAfter = " , objPriceCurr - faustUs * pt);
Print ( "priceDevBefore = " , objPriceCurr - faustUs * pt);
Print ( "Ask >= priceDevAfter && Ask >= priceDevBefore " , Ask , " >= " , priceDevAfter , " && " , Ask , " >= " , priceDevBefore);
if (Ask >= priceDevAfter && Ask >= priceDevBefore)
{
Print ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься покупать!" );
Alert ( "Внимание. На инструменте " , Symbol (), " ожидается 3-е касание луча. Готовься покупать!" );
return ( true );
}
}
return ( false );
}
//+-------------------------------------------------------------------------------------+//| Блок поиска своих объектов |//+-------------------------------------------------------------------------------------+bool GetSignal()
{
if (!IsObjectFound())
return (SIGNAL_NO);
if (objPrice1 > objPrice2)
return (SIGNAL_BUY);
if (objPrice1 < objPrice2)
return (SIGNAL_SELL);
}
//+-------------------------------------------------------------------------------------+//| Блок поиска своих объектов |//+-------------------------------------------------------------------------------------+bool IsObjectFound()
{
for ( int obj= 0 ; obj<= ObjectsTotal ()- 1 ; obj++)
{
objName = ObjectName (obj);
isObj = ObjectFind (objName);
objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
objPriceCurr = ObjectGetValueByShift(objName, 0 );
}
Print ( "objPriceCurr = " , objPriceCurr);
if (isObj != - 1 ) // Если объект найден, значит выходим из функцииreturn ( true );
return ( false ); // Объект не найден
}
//+-------------------------------------------------------------------------------------+//| Функция start |//+-------------------------------------------------------------------------------------+int start()
{
int signal = GetSignal();
if (IsObjectFound() == false )
{
Print ( "В окне отсуствуют объекты, поиск продолжается..." );
return ( 0 );
}
if (signal != SIGNAL_NO)
if (!AlertByTouching(signal))
return ( 0 );
Print ( "objPrice1 = " , objPrice1, ", objPrice2 = " , objPrice2);
// Print("objPriceCurr = ", objPriceCurr);return ( 0 );
}
isObj 는 int 입니다. 개체가 있는 경우 해당 개체가 포함된 창을 반환합니다. 그것이 없으면 내가 이해하는 것처럼 값 -1 이 반환됩니다. 도크에 따르면 메인 창은 0 부터 시작하고 그 다음에는 하위 창... 여기까지는 트레이딩 전문가를 위한 스케치, 순전히 신호입니다. 그러나 그는 원할 때 메시지를 보냅니다.
프로그램 실행 자원의 비용을 줄이는 측면에서 변수의 유형(int, double 등)을 선언하는 것이 더 나은 곳은 어디입니까? 예. int i는 전역 수준에서 선언하거나 int start() ... in for (int i=OrdersTotal()-1; i>=0; i--) ... 선언할 수 있습니다. 각 틱에 대해 extern 매개변수 직후에 전역 수준에서 한 번보다 더 비쌉니다. 아니면 자원 집약도의 차이가 동일한가요?
어쨌든 모든 변수(메모리의 변수를 위한 장소)는 프로그램 시작 시 한 번 생성되며, 그 변수는 텍스트에서 발생한 장소( 변수 선언 )에서 초기화되어야 하지만 항상 일어나는 것은 아니며, 따라서 모든 것이 제대로 작동하도록 하려면 선언할 때 명시적으로 초기화하는 것을 잊지 마십시오. 속도에 영향을 미치지 않으면 최소한 사이클 내부에서 선언할 수 있습니다.
귀하의 코드에 따라 코드가 수정되었습니다.
테스트하는 동안 첫 번째 틱, 다섯 번째 - 다음 틱에 배치 순서대로 4개의 주문이 마감되었습니다. 여기에 다른 문제가 있을 수 있습니다. 반복적으로 테스트했습니다.
테스터 로그의 프로그램 코드와 항목이 제공됩니다.
감사합니다. 쉬르킨
공습 경보 해제. 바꾸다
에
다음과 같은 상황이 있습니다.
오해가 있었던 부분을 코드로 보여줬습니다. 모든 변수는 전역으로 선언됩니다. IsObjectFound() 함수에서 현재 막대에 있는 개체의 첫 번째 및 두 번째 가격 포인트 값, 이름 및 개체 가격 값을 가져옵니다. 객체가 발견되면 함수는 true 모드에서 종료되어야 하고 그렇지 않으면 false 입니다.
처음에 객체를 찾지 못하면 함수를 종료한다는 조건을 작성했습니다.
테스터에서 실행하고 개체를 그리지 않았으며 아무것도 없습니다. 베어 그래프입니다. 그러나 함수가 종료되지 않고 그에 따라 인쇄되지 않습니다.
시작 기능의 실행은 계속됩니다. 이게 뭔가요?
전역 변수 - 전역 조회. 데이터 모델을 보지 않고 알고리즘에 대해 무엇을 말할 수 있습니까?
데이터를 추적하겠습니다. isObj는 부울이고 그 모든 것은...
전역 변수 - 전역 조회. 데이터 모델을 보지 않고 알고리즘에 대해 무엇을 말할 수 있습니까?
데이터를 추적하겠습니다. isObj는 부울이고 그 모든 것은...
isObj 는 int 입니다. 개체가 있는 경우 해당 개체가 포함된 창을 반환합니다. 그것이 없으면 내가 이해하는 것처럼 값 -1 이 반환됩니다. 도크에 따르면 메인 창은 0 부터 시작하고 그 다음에는 하위 창... 여기까지는 트레이딩 전문가를 위한 스케치, 순전히 신호입니다. 그러나 그는 원할 때 메시지를 보냅니다.