MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1928

 
Valeriy Yastremskiy # :
만진/교차 알고리즘 - 이동이 맞지 않습니까?

어렵습니다. 적당한 것을 넘겨야 할 것입니다. 그는 레벨의 단순한 시각화와 이전 레벨로의 정지 이동에 만족합니다. 그것으로 충분합니다. 나는 그런 트릭을 기대하지 않았다. 그가 오랫동안 사라지지 않았다면 나는 했을 것이지만 지금은 아니다. 중재는 바람직하지 않으므로 이미 있습니다.

 

step:=:const이면 현재 정지 손실에서 주어진 단계로 레벨을 표시합니다. 글쎄, 더 쉬울 수 있습니다.

 
Maxim Kuznetsov # :

step:=:const이면 현재 정지 손실에서 주어진 단계로 레벨을 표시합니다. 글쎄, 더 쉬울 수 있습니다.

예, 알고리즘을 이해합니다. 창을 열고 무슨 일이 일어나고 있는지 적어 두십시오. 좀 파고들고 쓰기에 그런 조건이 아닙니다.

추신 다른 시나리오에서는 묻지 않을 것입니다.

 
알고 있는 사람을 알려주세요. 데모 버전에서는 주문을 열 수 없습니다. 일반 오류가 대기 중이라고 표시됩니다! 문제가 무엇입니까?
 
Maxim Kuznetsov # :

가장 가능성이 높습니다 - ex4는 이전 컴파일러에 의해 컴파일되었습니다. 터미널이 업데이트되었으며 고문은 고대 druevny입니다. 작가에게 연락이 필요하다

두 번째 옵션 - 서명이 동의하지 않았거나 기술적인 이유로 인증되지 않았습니다. 여기서 모든 종류의 DNS가 업데이트되고 연결이 설정될 때까지 기다려야 합니다.

가상의 옵션 - 저자는 영원한 금지령에 빠졌습니다. 그의 프로필을 확인하세요

요약: 먼저 저자에게 질문을 해야 합니다.

감사해요

 
Vitaly Muzichenko # :

어렵습니다. 적당한 것을 넘겨야 할 것입니다. 그는 레벨의 단순한 시각화와 이전 레벨로의 정지 이동에 만족합니다. 그것으로 충분합니다. 나는 그런 트릭을 기대하지 않았다. 그가 오랫동안 사라지지 않았다면 나는 했을 것이지만 지금은 아니다. 중재는 바람직하지 않으므로 이미 있습니다.

OnInit 레벨 계산 및 그리기에서. 다른 작업이지만 근처에 있습니다. Ultimate 레벨을 위한 귀하의 역할.

PS, 물론 나는 많이 가지고 있지 않습니다. 주문, 위치 및 추적이 추적되는 방식을 이해해야 하며 그리기 쉽습니다. 그러나 레벨에 도달하면 레벨의 색상을 변경하거나 수평선을 제거해야 합니다.
파일:
 
Valeriy Yastremskiy # :

OnInit 레벨 계산 및 그리기에서. 다른 작업이지만 근처에 있습니다. Ultimate 레벨을 위한 귀하의 역할.

PS, 나는 확실히 많이 가지고 있지 않습니다. 주문, 위치 및 추적이 추적되는 방식을 이해해야 하며 그리기 쉽습니다. 그러나 레벨에 도달하면 레벨의 색상을 변경하거나 수평선을 제거해야 합니다.

내가 할 수 있는 것))) 교차 기능에 트리거 플래그를 추가해야 합니다. 나는 성공하지 못한다.

 input double    PriceOrder= 0.0 ;         // Цена ордера, 
input int TralStep= 300 ;                   // Шаг отслеживания SL  
input int NumberLevels= 7 ;             // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine= true ;               // Рисовать / не рисовать уровни



//---


double LevelPrice[ 10 ];                 // Количество уровней не более 10.
string HLineName[ 10 ];
bool Del= true ;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if (FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer ( 60 );
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  
   Comment ( "" );
  
   int obj_total= ObjectsTotal ();
       PrintFormat ( "Всего %d объектов" ,obj_total);
       for ( int i=obj_total- 1 ; i>= 0 ; i--)
        {
         string name= ObjectName (i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete (name);
        }
//--- destroy timer
   EventKillTimer ();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester ()
  {
//---
   double ret= 0.0 ;
//---

//---
   return (ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate( const long             chart_ID= 0 ,         // ID графика 
                 const string           name= "HLine" ,       // имя линии 
                 const int              sub_window= 0 ,       // номер подокна 
                 double                 price= 0 ,           // цена линии 
                 const color            clr= clrRed ,         // цвет линии 
                 const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии 
                 const int              width= 1 ,           // толщина линии 
                 const bool             back= true ,         // на заднем плане 
                 const bool             selection= false ,     // выделить для перемещений 
                 const bool             hidden= false ,       // скрыт в списке объектов 
                 const long             z_order= 0 )         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if (!price) 
      price= SymbolInfoDouble ( Symbol (), SYMBOL_BID ); 
//--- сбросим значение ошибки 
   ResetLastError (); 
//--- создадим горизонтальную линию 
   if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price)) 
     { 
       Print ( __FUNCTION__ , 
             ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ()); 
       return ( false ); 
     } 
//--- установим цвет линии 
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style); 
//--- установим толщину линии 
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); 
//--- успешное выполнение 
   return ( true ); 
  } 
  
   //+------------------------------------------------------------------+
   //| Поиск ближайших уровней                                          |
   //+------------------------------------------------------------------+  
void   ShowModify( string name, string tip, bool del)
  {
   if (del){
ObjectDelete (name);
  }
   if (!del){
 if (tip== "Sell" ){
   ObjectSetInteger ( 0 ,name, OBJPROP_COLOR , clrGold );
 } 
   if (tip== "Buy" ){
   ObjectSetInteger ( 0 ,name, OBJPROP_COLOR , clrCoral );
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel( int level, string tip)
{
if ((tip== "Buy" && Bid > LevelPrice[level]) || (tip== "Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return ( true );
}
return ( false );
}



void CalculationOfLevels( double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for ( int i= 0 ; i<=(numberl); i++){
if (tip== "Buy" ){
LevelPrice[i] =  priceorder + trstep* Point ;
if (tip== "Sell" ){
LevelPrice[i] =  priceorder - trstep* Point ;

}
}
CurLevel= 1 ;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine( string tip)
{
color ClrLine= clrRed ;
if (tip== "Buy" ) ClrLine= clrBlue ;
if (tip== "Sell" ) ClrLine= clrRed ;
for ( int i= 0 ;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]= "LevelPrice_" +( string )i+ "_" +( string )LevelPrice[i];

HLineCreate( 0 ,HLineName[i], 0 ,LevelPrice[i],( color )ClrLine, STYLE_SOLID , 1 );
}
}
파일:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy # :

내가 할 수 있는 것))) 교차 기능에 트리거 플래그를 추가해야 합니다. 나는 성공하지 못한다.

조금 전혀.

나는 오래전에 이와 같은 것을 작성했지만 이것은 위치가 열릴 위치를 표시하는 고문입니다.


이제 트롤이 작동할 위치에 이러한 선이 그려지도록 트롤 코드에 추가해야 합니다.

후행 Expert Advisor가 하나의 차트에 설치되고 라인이 열린 위치가 있는 모든 차트에 표시되어야 한다는 사실 때문에 작업이 복잡합니다.

파일:
 
Vitaly Muzichenko # :

조금 전혀.

나는 오래전에 이와 같은 것을 작성했지만 이것은 포지션이 열릴 위치를 표시하는 고문입니다


이제 트롤이 작동할 위치에 이러한 선이 그려지도록 트롤 코드에 추가해야 합니다.

후행 Expert Advisor가 하나의 차트에 설치되고 라인이 열린 위치가 있는 모든 차트에 표시되어야 한다는 사실 때문에 작업이 복잡합니다.

모든 창이 이미 열려 있습니까, 아니면 포지션이 나타날 때 고문이 열립니까? 작업은 차트를 찾는 것입니다)
 
Valeriy Yastremskiy # :
모든 창이 이미 열려 있습니까, 아니면 포지션이 나타날 때 고문이 열립니까? 작업은 차트를 찾는 것입니다)

자리가 있으면 그 창이 열린다고 생각합니다.