안녕하세요 전문가 여러분. 지표를 조정하는 데 도움이 필요합니다. 지표의 본질은 다음과 같습니다. 이전 막대에 대한 가격 인상 금액을 계산합니다. 별표 막대는 0으로 간주됩니다. 즉, 시가와 종가가 동일합니다. 컴파일시에는 에러가 안나는데 테스트를 해보면 문자의 80번째 20번째 줄에 에러가 납니다. 또한 신호선을 비스듬하게 그립니다. 하지만 이것이 메인 버퍼의 잘못된 계산에 대한 이유라고 생각합니다. 수정을 도와주세요.
Get a unique domain name plus our FREE value-added services to help you get the most from it. Call it a "dot-com name," a URL, or a domain. Whatever you call it, it's the cornerstone of your online presence, and we make getting one easy. Simply enter the name you want in the search field above, and we'll tell you instantly whether the name is...
안녕 이반! 아무도 여기에 새로 온 사람들을 꾸짖지 않지만 반대로 그들은 도우려고 노력합니다. 나 자신은 초보자입니다. 이제 귀하의 질문에 대해. 포지션 개설에 대한 체크가 이루어졌기 때문에 여러 포지션이 개설되었지만 체크를 중지하는 것을 잊었습니다. return 문 은 호출 프로그램에 제어를 반환합니다(MQL5 참조에서 가져옴).
EA 코드에 반환 을 추가해야 합니다(노란색으로 강조 표시됨):
또한 컴파일러가 경고를 발행하지 않도록 매수 및 매도 포지션을 여는 조건에서 OrderSend(mrequest,mresult) 를 확인하는 조건을 하나 더 추가해야 합니다. 이 조건은 if 문 에 의해 설정되며 다음과 같이 표시됩니다.
그리고 한 가지 더 고려해야 합니다. 23:59:59에 한 거래일에서 다른 거래일로 전환하면 이전에 열린 포지션이 닫히고 00:00:00에 새 포지션이 즉시 열립니다. 이것은 특정 외환 딜러와 그의 거래 조건에 따라 달라지는 이른바 롤오버 마감 및 롤오버 오픈입니다. 포럼에서 검색하면 어딘가에 관련 정보가 있습니다.
안부 인사를 전합니다. 블라디미르.
안녕하세요.
대답 해 주셔서 감사합니다! 하지만 반품 명세서 가 무엇을 위한 것인지 이해가 되지 않습니까? 실제로 이 코드에는 두 가지 조건이 있으며 그 중 하나가 충족되면 검사가 중지되어야 합니다.
//--- есть ли открытые позиции?bool Buy_opened= false ; // переменные, в которых будет храниться информация bool Sell_opened= false ; // о наличии соответствующих открытых позицийif ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
{
if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY ) // если истина, выполняем условие 1
{
Buy_opened= true ; //это длинная позиция
}
elseif ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL ) // иначе выполняем условие 2
{
Sell_opened= true ; // это короткая позиция
}
}
직선 위의 두 점으로 미래를 포함하여 이 직선에서 임의의 세 번째 점의 가격을 찾을 수 있습니다(반대의 경우도 마찬가지).
고맙습니다! 나는 노력할 것이다.
추신 : 유일한 것. 언뜻 보면 이해가 되지 않습니다. MT4의 EA에서 작동합니까?
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+안녕하세요!
조언가와 함께 도와주세요.
그는 적절한 방향으로 레벨 30과 70의 RSI 신호를 처리하고 그리드를 만듭니다.
% 손실에서 손절매처럼 꿰매어 놓은 것 같지만 주문은 주기적으로 동결되고 수동으로 닫거나 보증금을 배출할 때까지 닫히지 않습니다.
즉, 주문이 열렸고 가격은 이미 5,000핍 이상 올랐으며 여전히 적자를 유지하고 있습니다.
오류를 찾아야 합니다. 그리고 이것이 가능하지 않다면 조언자에게 포인트 손실에 대한 별도의 손절매를 꿰매십시오.
2명의 어드바이저를 하나로 합치려고 했지만 제 실력으로는 아무 일도 일어나지 않았습니다.
안녕하세요. 말해 주세요. 마지막 틱에 통과한 점수를 얻어야 합니다. 하지만 작동하지 않습니다.
안녕하세요. 말해 주세요. 마지막 틱에 통과한 점수를 얻어야 합니다. 하지만 작동하지 않습니다.
이렇게 시도하십시오.
이렇게 시도하십시오.
다시 안녕.
초보자 질문에주의하십시오.
코드의 오류를 지적해야 하기 때문에 테스터에서 EA는 주문을 열지 않습니다 ...
동시에 컴파일러는 오류 및 경고를 발행하지 않으며 로그는 유사합니다. 오류가 없습니다 ...
모두에게 좋은 하루!
mql4에서 mql5로 전환하려고 합니다.
문제. 왜 현재 가격과 변수 Hay 값 간의 차이가 숫자 <1이어야 합니까( mql4에서와 같이) mql5는 내가 이해할 수 없는 표현식을 계산하고 표시합니다(예: 2.99999999 -( 빼기)05 .
mql5가 주어진 값의 차이를 올바르게 계산하도록 하는 방법은 무엇입니까? NormalizeDouble() 로 모든 값을 정규화했지만 위의 값은
변함없이 표시됩니다. 두 값 모두 doble 유형이기 때문에 이것은 나에게 이상합니다.
도움을 주셔서 감사합니다.
안녕 이반! 아무도 여기에 새로 온 사람들을 꾸짖지 않지만 반대로 그들은 도우려고 노력합니다. 나 자신은 초보자입니다. 이제 귀하의 질문에 대해. 포지션 개설에 대한 체크가 이루어졌기 때문에 여러 포지션이 개설되었지만 체크를 중지하는 것을 잊었습니다. return 문 은 호출 프로그램에 제어를 반환합니다(MQL5 참조에서 가져옴).
EA 코드에 반환 을 추가해야 합니다(노란색으로 강조 표시됨):
또한 컴파일러가 경고를 발행하지 않도록 매수 및 매도 포지션을 여는 조건에서 OrderSend(mrequest,mresult) 를 확인하는 조건을 하나 더 추가해야 합니다. 이 조건은 if 문 에 의해 설정되며 다음과 같이 표시됩니다.
그리고 한 가지 더 고려해야 합니다. 23:59:59에 한 거래일에서 다른 거래일로 전환하면 이전에 열린 포지션이 닫히고 00:00:00에 새 포지션이 즉시 열립니다. 이것은 특정 외환 딜러와 그의 거래 조건에 따라 달라지는 이른바 롤오버 마감 및 롤오버 오픈입니다. 포럼에서 검색하면 어딘가에 관련 정보가 있습니다.
안부 인사를 전합니다. 블라디미르.
안녕하세요.
대답 해 주셔서 감사합니다! 하지만 반품 명세서 가 무엇을 위한 것인지 이해가 되지 않습니까? 실제로 이 코드에는 두 가지 조건이 있으며 그 중 하나가 충족되면 검사가 중지되어야 합니다.
아니면 그렇지 않습니까?