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

 

흠... 왠지 좌표를 바꿀 생각은 하지 못했는데. 팁 고마워

그럼 그런 질문. 진입점 조건이 있습니다. 각 틱마다 재설정되지 않도록 정적 변수 를 통해 구현했습니다. 따라서 차트의 일부 위치에서 로봇은 수평 레벨이 전혀 없는 진입점을 그리고 이에 따라 MA와의 교차점을 그립니다. 테스터에서 코드를 실행하면 문제가 표시됩니다. EURUSD에. 작업을 다르게 구현해야 합니까? 저는 프로그래밍 전문가가 아닙니다.

즉, 패턴이 나타나고 레벨이 그려지고 로봇이 레벨 중 하나의 세 교차점을 기다리고 있습니다.

이에 대해 어떻게 생각하십니까?

 
voron_026 :

흠... 왠지 좌표를 바꿀 생각은 하지 못했는데. 팁 고마워

그럼 그런 질문. 진입점 조건이 있습니다. 각 틱마다 재설정되지 않도록 정적 변수 를 통해 구현했습니다. 따라서 차트의 일부 위치에서 로봇은 수평 레벨이 전혀 없는 진입점을 그리고 이에 따라 MA와의 교차점을 그립니다. 테스터에서 코드를 실행 하면 문제가 표시 됩니다. EURUSD에. 작업을 다르게 구현해야 합니까? 저는 프로그래밍 전문가가 아닙니다.

즉, 패턴이 나타나고 레벨이 그려지고 로봇이 레벨 중 하나의 세 교차점을 기다리고 있습니다.

이에 대해 어떻게 생각하십니까?

그리고 누가 그것을 필요로합니까? 무례하다고 생각하지 않습니까? 로봇이 어떤 값을 얻는지 찾으면 문제에 대한 또 다른 해결책을 찾을 수 있습니다.

 

도움말 2는 오류를 제공합니다! 빨간색으로 강조 표시된 오류, 도와주세요!



//+----------------------------------------------- --------------------+

//| Asyl.mq4의 후행 정지 |

//| Copyright 2017, MetaQuotes Software Corp. |

//| https://www.mql5.com |

//+----------------------------------------------- --------------------+

#property copyright "Alibek Asyll"

#속성 링크 "https://www.mql4you.com"


외부 정수 TralType = 0; // 0-Sar, 1-ATR, 2-HMA

외부 이중 SAR_Step = 0.02;

외부 이중 SAR_Max = 0.2;

외부 정수 ATR_Period = 14;

외부 이중 ATR_K = 2.0;

외부 int MMA_Period = 16;

extern int MMA_Method = 3;

외부 int MMA_Shift = 0;

날짜/시간 LBT;

//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//---

//---

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//---

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

정수 시작()


{

부울 오류 = 거짓;

if (LBT!=시간[0] {

if (OrdersTotal()>0) {

for (int i=o; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

이중 SL = OrderStopLoss();

if (주문 유형()==0) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0);

부서지다;

사례 1: SL = 높음[1] - iATR(NULL,0,ATR_Period,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL, 0,"VininI_HMA_sound&amp", HMA_Period, HMA_Method, 3, HMA_Shift, false, false,"",1,0,0);

부서지다;

}

if (SL<OrderStopLoss())

SL = 주문 중지 손실();

}

(주문 유형()==1){

스위치(트랄타입){

경우 0: SL = iSAR(NUll,0,SAR_Step, SAR_Max,0);

부서지다;

사례 1: SL = 낮음[1] + iATR(NULL,0,ATR_Period,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL, 0,"VininI_HMA_sound&amp", HMA_Period, HMA_Method, 2, HMA_Shift, false, false,"",1,0,0);

부서지다;

}

if (SL>OrderStopLoss())

SL = 주문 중지 손실();

}

if (SL!=OrderStopLoss()) {

(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderTakeProfit(),0))

오류=참;

}

}

만약 (!오류)

LBT = 시간[0];

}


반품();

}

//+----------------------------------------------- --------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll : 도움말 2가 오류를 제공합니다! 빨간색으로 강조 표시된 오류, 도와주세요!

코드를 삽입 하려면 SRC 버튼을 사용하는 것이 좋습니다. 오류 텍스트를 보고합니다. Expert Advisor의 속도를 높이려면 다음 텍스트를 삭제하십시오.

 //+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//---

   

//---

   return ( 0 );

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//---

   return ( 0 );

  }

이러한 함수를 호출하는 데 시간이 걸리며 비어 있습니다. 그리고 그것들이 없으면 프로그램의 텍스트로 작업하는 것이 더 쉬울 것입니다. 중괄호를 센다 . 이 작업을 더 쉽게 하려면 도구 메뉴에서 스타일러 를 사용해 보십시오. 빈 줄을 버리십시오.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

모두에게 좋은 하루.

MT-4 테스터에서 코딩하고 테스트하려는 간단한 아이디어가 있습니다.

다음 조건이 동시에 충족될 때 주문을 엽니다.

1. 미닛캔들 개막식에서

2 내가 원하는 가격으로

3. 내가 필요한 날

4. 가격의 가치는 그날의 가치와 정확히 일치해야 합니다.

예를 들어, 27일에는 시가 가 1.2414 인 분 캔들이 있었습니다.

1) 양초가 시작될 때 2) 1.2414의 가격으로 주문을 시작해야 합니다. 3) 하지만 27일 이후 다음 날

예를 들어, 28일에는 시가가 1.2438인 분 캔들이 있었습니다.

1) 양초가 시작될 때 2) 1.2438의 가격으로 주문을 시작해야 합니다. 3) 그러나 28일 이후 가장 가까운 날

예를 들어, 12일에는 시가가 1.2451인 분 캔들이 있었습니다.

1) 양초가 시작될 때 2) 1.2451의 가격으로 주문을 시작해야 합니다. 3) 하지만 12일 이후 가장 가까운 날


이 아이디어를 구현하기 위해 배열에 대한 주제를 연구하기 시작했고 두 개의 1차원 배열을 만들었습니다.

위의 아이디어를 구현하도록 내 코드를 수정해 주시면 대단히 감사하겠습니다.

나는 눈치가 느리므로 올바른 코드를 작성하고 말로 설명하지 않으면 매우 감사하겠습니다.

그래서 나는 훨씬 더 빨리 이해

여기 내 코드가 있습니다.

 double mass[ 3 ]=
{
1.2414 ,
1.2438 ,
1.2451
};
int mass1[ 3 ]=
{
27 ,
28 ,
12
};
double value = NormalizeDouble ( Bid , 4 ) ;
double S = ArrayBsearch (mass,  value,   WHOLE_ARRAY ,   0 , MODE_ASCEND );
int value1 = Day () ;
int S1 = ArrayBsearch (mass1,  value1, WHOLE_ARRAY ,   0 , MODE_ASCEND );

if ( Bid   == iOpen ( NULL , PERIOD_M1 , 0 ))
if ( Day ()!= S1)
if ( NormalizeDouble ( Bid , 4 )== S)
{
OrderSend ( Symbol (), OP_SELL , 0.1 , Bid , 3 , Ask + 400 * Point , Ask - 200 * Point , "jfh" , 123 );
}
 

안녕하세요! 작성된 코드는 가격이 상한선이나 하한선을 넘어섰을 때 신호 수준을 이동하도록 설계되었지만 이것은 일어나지 않습니다. 무엇이 잘못되었는지 알려주세요.

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if ( Bid >=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll ();
 OR= 0 ;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if ( Bid <=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll ();
 OR= 0 ;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price= iHigh ( Symbol (), PERIOD_M15 , 0 );                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate ( "UrO" , OBJ_HLINE , 0 , 0 ,price);
ObjectSet ( "UrO" , OBJPROP_COLOR , clrYellowGreen );                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+ 30 * Point ;                                                                             //Сигнальный уровень А(Максимум)
ObjectCreate ( "UrA" , OBJ_HLINE , 0 , 0 ,priceA);
ObjectSet ( "UrA" , OBJPROP_COLOR , clrDarkSlateBlue ); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price- 30 * Point ;                                                                             //Сигнальный уровень B(Минимум)
ObjectCreate ( "UrB" , OBJ_HLINE , 0 , 0 ,priceB); 
ObjectSet ( "UrB" , OBJPROP_COLOR , clrOrangeRed ); 
 
ANDREY : 예를 들어, 27일에는 시가 가 1.2414 인 분 캔들이 있었습니다.

1) 양초가 시작될 때 2) 1.2414의 가격으로 주문을 시작해야 합니다. 3) 하지만 27일 이후 다음 날

여기 내 코드가 있습니다.

첫째, 이미 정규화된 BID를 정규화하는 것은 교사가 지시하지 않는 한 거의 가치가 없습니다.

둘째, 무엇입니까? 27일 가격이 나왔는데 28일에 작동이 되도록 배열에 데이터를 급히 입력하는건가요? 그리고 28일에 급한 일이 생기면? 배열에 계산하기 어려운 데이터가 포함되어 있습니다. 데이터를 계산해야 합니다. Expert Advisor를 단계별로 디버깅하는 것이 좋습니다. 1) 필요한 가격을 결정하고 Alert() 함수를 사용하여 표시합니다. 정확성을 확인한 후 - 다음을 계산하고 출력하십시오 ... 등등을 끝까지하십시오. 모든 코드를 끝까지 작성하는 것은 시기상조입니다. 디버깅의 바다에서는 변경해야 합니다. 그러한 기술을 단순한 것에서 복잡한 것으로 어떻게 보십니까?

 
vikzip : 가격이 상한 또는 하한을 넘어섰을 때 시그널 레벨을 이동시키도록 작성된 코드인데, 이것은 일어나지 않는다.

여기에 쓰여진 내용을 봅시다. 첫째, 줄이 짧아야 합니다. 화면에 맞고 컴파일러가 더 빠릅니다.

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if ( Bid >=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll ();
 OR= 0 ;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if ( Bid <=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll ();
 OR= 0 ;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
BID가 더 크면 조치를 취하십시오. 또한 BID가 더 낮으면 동일한 작업을 수행합니다. 간단히 공식화할 수 있습니다. 가격이 다소 높거나 낮으면 ...
당신은 코멘트에 무언가를 옮기는 것에 대해 뭔가를 쓰고 당신 자신은 모든 개체를 삭제합니다. 10줄이 4줄로 바뀝니다.
 if (( Bid >=priceA) ||( Bid <=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll ();
   OR= 0 ;                               // А это для чего?????????????????
} 

하지만 !!! OR 기호를 더 사용해야 합니까? 이 OR을 0으로 만드는 대신 새 개체 생성을 이 위치에 삽입해야 합니다. 그리고 훨씬 더 쉽습니다. 개체를 삭제하는 대신 새 위치로 옮기기만 하면 됩니다. 단 3줄의 코드입니다. 아니면 교사가 더 많은 것을 요구합니까?

 if (( Bid >=priceA) ||( Bid <=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
단순에서 거짓으로 또는 그 반대로?
 
STARIJ :

첫째, 이미 정규화된 BID를 정규화하는 것은 교사가 지시하지 않는 한 거의 가치가 없습니다.

둘째, 무엇입니까? 27일 가격이 나왔는데 28일에 작동이 되도록 배열에 데이터를 급히 입력하는건가요? 그리고 28일에 급한 일이 생기면? 배열에 계산하기 어려운 데이터가 포함되어 있습니다. 데이터를 계산해야 합니다. Expert Advisor를 단계별로 디버깅하는 것이 좋습니다. 1) 필요한 가격을 결정하고 Alert() 함수를 사용하여 표시합니다. 정확성을 확인한 후 - 다음을 계산하고 출력하십시오 ... 등등을 끝까지하십시오. 모든 코드를 끝까지 작성하는 것은 시기상조입니다. 디버깅의 바다에서는 변경해야 합니다. 그러한 기술을 단순한 것에서 복잡한 것으로 어떻게 보십니까?

팁을 주셔서 감사합니다.

그러나 당신의 추론에서 당신은 내가 TRADING Expert Advisor를 쓰려고 한다는 사실에서 출발하는 것 같습니다.

그렇지 않다고 말씀드리지 못한 점 죄송합니다.

고문의 도움으로 나는 위의 매개변수 사이의 상관 관계, 즉 이미 거래 중인 고문의 기초를 형성할 수 있는 아이디어를 확인하거나 반박하기 위해 약간의 규칙성, 즉 상관 관계가 있는지 테스트하려고 합니다.

따라서 모든 것이 위에서 언급한 계획에 따라 일어날 수 있도록 내 코드를 수정해 주시면 감사하겠습니다.

그리고 귀하의 의견은 거래 고문을 작성할 때 저에게 확실히 도움이 될 것입니다.

감사해요

 
ANDREY :

팁을 주셔서 감사합니다.

그러나 당신의 추론에서 당신은 내가 TRADING Expert Advisor를 쓰려고 한다는 사실에서 출발하는 것 같습니다.

그렇지 않다고 말씀드리지 못한 점 죄송합니다.

고문의 도움으로 나는 위의 매개변수 사이의 상관 관계, 즉 이미 거래 중인 고문의 기초를 형성할 수 있는 아이디어를 확인하거나 반박하기 위해 약간의 규칙성, 즉 상관 관계가 있는지 테스트하려고 합니다.

따라서 모든 것이 위에서 언급한 계획에 따라 일어날 수 있도록 내 코드를 수정해 주시면 감사하겠습니다.

그리고 귀하의 의견은 거래 고문을 작성할 때 저에게 확실히 도움이 될 것입니다.

감사해요

방해해서 죄송합니다. 하지만... 그리고 트레이딩과 비 트레이딩 Expert Advisors 사이에 선을 그리는 논리는 어떻게 달라야 할까요?

직장에 있을 때 시계를 집에서 볼 때와 다르게 보나요?