자신만의 키보드 및 키보드 컨트롤(CHART_MOUSE_SCROLL, CHART_KEYBOARD_CONTROL ...)을 생성하려면 비활성화해야 합니다. 하지만 불가능합니다. 그러나 BE의 그러한 인터페이스의 속도는 IT가 비동기 기능을 사용할 수 없기 때문에 기본 인터페이스보다 훨씬 높습니다. 매우 금지된 ChartGetInteger
다시 한 번 감사합니다, 니콜라이. CanvasBar.mq5를 mt4로 변환하고 너비/색상/...에 관한 몇 가지 입력 옵션을 추가했습니다(예: "닌자 트레이더 양초 스타일 모방"에 사용할 수 있음).
안녕하세요! 표준 iEnvelopes 표시기 가 있습니다! 내가 원하는 방식으로 작동하게 할 수 없습니다! 즉, 양초가 현재 UP 양초의 선에 닿거나 지나갈 때 BUY가 열리고 양초가 현재 DOWN 양초의 선에 닿거나 교차한 다음 SELL이 열리는 것이 필요합니다 ..... 그리고 이것은 한 번 발생합니다. (신호가 작동하고 다른 모든 것이 신호가 작동하며 모든 것이 영구적입니다)!
안녕하세요! 표준iEnvelopes 표시기 가 있습니다! 내가 원하는 방식으로 작동하게 할 수 없습니다! 즉, 양초가 현재 UP 양초의 선에 닿거나 지나갈 때 BUY가 열리고 양초가 현재 DOWN 양초의 선에 닿거나 교차한 다음 SELL이 열리는 것이 필요합니다 ..... 그리고 이것은 한 번 발생합니다. (신호가 작동하고 다른 모든 것이 신호가 작동하며 모든 것이 영구적입니다)!
도와주세요!
코드에 프로세스에 대한 이해를 추가해야 합니다 :-)
촛불이 닫힐 때까지 High[0]은 커질 수만 있고 Low[0]은 감소할 수 있으며 디컴파일된 봉투는 원하는 대로 작동합니다 :-)
나는 오픈 클로즈로 MA를 구축하지만 그래프로 판단하면 오른쪽에서 왼쪽으로 계산되는 것처럼 보입니다.
iMAOnArray 및SimpleMAOnBuffer를 도구로 사용했는데 더 나은 옵션이 있습니까?
//+------------------------------------------------------------------+//| _null.mq4 |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#property strict#property indicator_separate_window#include <MovingAverages.mqh>
#property indicator_buffers4#property indicator_plots2//--- plot OC#property indicator_label1"OC"#property indicator_type1DRAW_COLOR_HISTOGRAM#property indicator_color1clrSteelBlue , clrRed , clrGreen#property indicator_style1STYLE_SOLID#property indicator_width11#property indicator_label2"MA1"#property indicator_type2DRAW_LINE#property indicator_color2clrBrown#property indicator_style2STYLE_SOLID#property indicator_width21//--- indicator buffersdouble OC[], OC_color[], MA1_buf[];
inputint MA1= 2 ;
intOnInit ()
{
IndicatorSetString ( INDICATOR_SHORTNAME , "t1" );
SetIndexBuffer ( 0 ,OC, INDICATOR_DATA );
SetIndexBuffer ( 1 ,OC_color, INDICATOR_COLOR_INDEX );
SetIndexBuffer ( 2 , MA1_buf, INDICATOR_DATA );
//PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,50);//--- indicator buffers mapping//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if (rates_total< 4 ) return0 ;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.//if(limit>1) // если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total- 1 ;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
for ( int i=limit; i>= 0 && ! IsStopped (); i--)
{
// необходимые действия по расчёту индикатора
OC[i]= fmax (open[i],close[i])- fmin (open[i],close[i]);
if (OC[i]> 0.001 )
{ OC_color[i]= 1 ;
}
}
/* for(int k=limit; k>=0 && !IsStopped(); k--)
{
MA1_buf[k]=iMAOnArray(OC,0,MA1,k,MODE_SMA,0);
}
*/
SimpleMAOnBuffer(rates_total,prev_calculated, 0 ,MA1,OC,MA1_buf);
//--- return value of prev_calculated for next callreturn (rates_total);
}
예를 들어, 플랫에 대한 세 가지 신호가 있습니다. 크로스오버, 비교 1(이전 막대가 있는 플라잉 바) 및 비교 2(이전 TF의 이전 막대 및 이전)입니다.
MT에 통합된 MACD 어드바이저의 예를 사용하여 이것을 엉터리로 만들려고 하는데 어드바이저가 거래를 열지 않습니다. 잡지가 비어 있습니다. 즉, 표준 Expert Advisor의 기초는 건드리지 않고 거래를 여는 논리만 변경되었습니다. 따라서 줄임표는 MT-shny MACD-EA(일반)의 기본입니다.
프로필에 하나의 차트가 있습니다. Chatr를 두 개 더 열려면 스크립트가 필요합니다. 3개 모두 차트(1개, 2개 더 열림)를 지정 크기로 지정 위치에 만듭니다.
아무리 노력해도 다 똑같습니다.
이 스크립트는 내가 던지는 차트의 크기와 위치를 변경합니다.
//+------------------------------------------------------------------+
//| posicion.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property script_show_inputs
#import "user32.dll"
int SetWindowPos(int hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags);
int GetParent(int hWnd);
int GetTopWindow(int hWnd);
int GetWindow(int hWnd,int wCmd);
int GetWindowDC(int h);
int ShowWindow(int hWnd,int nCmdShow);
#import
#define GW_HWNDNEXT 0x0002
#define SWP_NOSIZE 0x0001
#define SWP_NOMOVE 0x0002
#define SWP_NOZORDER 0x0004
#define SW_RESTORE 9
#define SWP_FRAMECHANGED 0x0020
int gr2x1_P1 [] = {PERIOD_H4,PERIOD_D1,PERIOD_W1}; // Period of grafic 1 of 2x1
int CXShift2x1[] = {0,0,1040}; // Horizontal shift of grafic 1 of 2x1
int CYShift2x1[] = {0,268,0}; // Vertical shift of grafic 1 of 2x1
int CXSize2x1 [] = {1040,1040,880}; // Width of grafic 1 of 2x1
int CYSize2x1 [] = {500,500,1000}; // Height of grafic 1 of 2x1
input int xy = 0;//xy 0-2
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
int i,handle;
int parent;
handle=(int)ChartGetInteger(0,CHART_WINDOW_HANDLE);Print("ChartGetInteger(0,CHART_WINDOW_HANDLE) ",handle); //возвращает дескриптор 2688738
parent=GetParent(handle);Print("parent_0 ",parent); //возвращает дескриптор 197188
ShowWindow(parent,SW_RESTORE);
i=xy;
SetWindowPos(parent,0,CXShift2x1[i],CYShift2x1[i],CXSize2x1[i],CYSize2x1[i],0);
//Sleep(5000);
}
//+------------------------------------------------------------------+
Открыть Новые дополнительные Chart-ы
Но как дальше изменить размер дополнительных Chart-ов, ни как не получается.
int i;
for (i= 0 ; i< 3 ; i++)
{
long h= ChartOpen ( "EURUSD" ,gr2x1_P1[i]);
}
나는 매일 이 사회에서 훨씬 더 많은 표현과 부정적인 것을 보고 있고 아무도 반응하지 않습니다.
자, 질문이 끝났습니다.
자신만의 키보드 및 키보드 컨트롤(CHART_MOUSE_SCROLL, CHART_KEYBOARD_CONTROL ...)을 생성하려면 비활성화해야 합니다.
하지만 불가능합니다.
그러나 BE의 그러한 인터페이스의 속도는 IT가 비동기 기능을 사용할 수 없기 때문에 기본 인터페이스보다 훨씬 높습니다. 매우 금지된 ChartGetInteger
다시 한 번 감사합니다, 니콜라이. CanvasBar.mq5를 mt4로 변환하고 너비/색상/...에 관한 몇 가지 입력 옵션을 추가했습니다(예: "닌자 트레이더 양초 스타일 모방"에 사용할 수 있음).
안녕하세요! 표준 iEnvelopes 표시기 가 있습니다!
내가 원하는 방식으로 작동하게 할 수 없습니다!
즉, 양초가 현재 UP 양초의 선에 닿거나 지나갈 때 BUY가 열리고 양초가 현재 DOWN 양초의 선에 닿거나 교차한 다음 SELL이 열리는 것이 필요합니다 ..... 그리고 이것은 한 번 발생합니다. (신호가 작동하고 다른 모든 것이 신호가 작동하며 모든 것이 영구적입니다)!
도와주세요!
안녕하세요! 표준iEnvelopes 표시기 가 있습니다!
내가 원하는 방식으로 작동하게 할 수 없습니다!
즉, 양초가 현재 UP 양초의 선에 닿거나 지나갈 때 BUY가 열리고 양초가 현재 DOWN 양초의 선에 닿거나 교차한 다음 SELL이 열리는 것이 필요합니다 ..... 그리고 이것은 한 번 발생합니다. (신호가 작동하고 다른 모든 것이 신호가 작동하며 모든 것이 영구적입니다)!
도와주세요!
코드에 프로세스에 대한 이해를 추가해야 합니다 :-)
촛불이 닫힐 때까지 High[0]은 커질 수만 있고 Low[0]은 감소할 수 있으며 디컴파일된 봉투는 원하는 대로 작동합니다 :-)
봉투를 공개 가격에서 가져오지 않으면 닫히지 않은 막대를 볼 수 없습니다.
코드에 프로세스에 대한 이해를 추가해야 합니다 :-)
촛불이 닫힐 때까지 High[0]은 커질 수만 있고 Low[0]은 감소할 수 있으며 디컴파일된 봉투는 원하는 대로 작동합니다 :-)
봉투를 공개 가격에서 가져오지 않으면 닫히지 않은 막대를 볼 수 없습니다.
배열에서 MA를 계산하는 방법을 알아내도록 도와주세요.
나는 오픈 클로즈로 MA를 구축하지만 그래프로 판단하면 오른쪽에서 왼쪽으로 계산되는 것처럼 보입니다.
iMAOnArray 및 SimpleMAOnBuffer를 도구로 사용했는데 더 나은 옵션이 있습니까?
여보세요!!! 이 코드를 사용하여 링크를 주석으로 번역하지만 체계적으로 하루에 한 번 오류가 발생합니다. 웹 오류 5203(ERR_WEBREQUEST_REQUEST_FAILED. HTTP 요청의 결과로 오류가 발생했습니다)
스레드가 이것을 고칠 수 있습니까?
신호에 대한 가중치 계수를 만드는 방법을 알려주시겠습니까?
예를 들어, 플랫에 대한 세 가지 신호가 있습니다. 크로스오버, 비교 1(이전 막대가 있는 플라잉 바) 및 비교 2(이전 TF의 이전 막대 및 이전)입니다.
MT에 통합된 MACD 어드바이저의 예를 사용하여 이것을 엉터리로 만들려고 하는데 어드바이저가 거래를 열지 않습니다. 잡지가 비어 있습니다. 즉, 표준 Expert Advisor의 기초는 건드리지 않고 거래를 여는 논리만 변경되었습니다. 따라서 줄임표는 MT-shny MACD-EA(일반)의 기본입니다.
멍청한 코드를 맹신하지 마세요. 저는 프로그래머가 아닙니다.
...
Вводимые параметры
input double TradeLevel_BUY = 1;
input double TradeLevel_SELL = -1;
input double w_S_MA_1 = 1;
input double w_S_MA_2 = 1;
input double w_S_MA_3 = 1;
input double w_S_MA_4 = 1;
input double w_S_MA_5 = 1;
input double w_S_MA_6 = 1;
...
----------------
...
void OnTick(void)
{
double MA_Fast_1,
MA_Fast_2,
MA_Slow_1,
MA_Slow_2,
MA_Fast_LargeTF_1,
MA_Fast_LargeTF_2,
MA_Slow_LargeTF_1,
MA_Slow_LargeTF_2;
double S_MA_1,
S_MA_2,
S_MA_3,
...
MA_Slow_LargeTF_2=iMA(NULL,0,MA_Slow_LargeTF_2_Period,MA_Slow_LargeTF_2_Shift,MODE_EMA,PRICE_CLOSE,2);
...
double Sum;
if (MA_Fast_1>MA_Slow_1)
{
S_MA_1=1*w_S_MA_1;
}
else
{
S_MA_1=0;
}
return;
if (MA_Fast_1>MA_Fast_2)
{
S_MA_2=1*w_S_MA_2;
}
else
{
S_MA_2=0;
}
return;
if (Open[1]<MA_Fast_LargeTF_1 && Close[1]>MA_Fast_LargeTF_1 || Open[1]>MA_Fast_LargeTF_1 && Close[1]>MA_Fast_LargeTF_1)
{
S_MA_3=1*w_S_MA_3;
}
else
{
S_MA_3=0;
}
return;
...
if (MA_Fast_1<MA_Slow_1)
{
S_MA_4=-1*w_S_MA_4;
}
else
{
S_MA_4=0;
}
return;
if (MA_Fast_1<MA_Fast_2)
{
S_MA_5=-1*w_S_MA_5;
}
else
{
S_MA_5=0;
}
return;
if (Open[1]>MA_Fast_LargeTF_1 && Close[1]<MA_Fast_LargeTF_1 || Open[1]<MA_Fast_LargeTF_1 && Close[1]<MA_Fast_LargeTF_1)
{
S_MA_6=-1*w_S_MA_6;
}
else
{
S_MA_6=0;
}
return;
Sum=S_MA_1+S_MA_2+S_MA_3+S_MA_4+S_MA_5+S_MA_6;
...
if(Sum>TradeLevel_BUY)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Bid+TP*Point,"Optim",16384,0,Blue);
...
if(Sum<=TradeLevel_SELL)
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Ask-TP*Point,"Optim",16384,0,Red);
if(ticket>0)
안녕하세요! 그러한 기능을 올바르게 구현하는 방법(내가 하고 싶은 일을 이해할 것이라고 생각합니다)?
안녕하세요. winApi user32.dll에 도움이 필요합니다.
프로필에 하나의 차트가 있습니다. Chatr를 두 개 더 열려면 스크립트가 필요합니다. 3개 모두 차트(1개, 2개 더 열림)를 지정 크기로 지정 위치에 만듭니다.
아무리 노력해도 다 똑같습니다.
이 스크립트는 내가 던지는 차트의 크기와 위치를 변경합니다.
//+------------------------------------------------------------------+ //| posicion.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs #import "user32.dll" int SetWindowPos(int hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags); int GetParent(int hWnd); int GetTopWindow(int hWnd); int GetWindow(int hWnd,int wCmd); int GetWindowDC(int h); int ShowWindow(int hWnd,int nCmdShow); #import #define GW_HWNDNEXT 0x0002 #define SWP_NOSIZE 0x0001 #define SWP_NOMOVE 0x0002 #define SWP_NOZORDER 0x0004 #define SW_RESTORE 9 #define SWP_FRAMECHANGED 0x0020 int gr2x1_P1 [] = {PERIOD_H4,PERIOD_D1,PERIOD_W1}; // Period of grafic 1 of 2x1 int CXShift2x1[] = {0,0,1040}; // Horizontal shift of grafic 1 of 2x1 int CYShift2x1[] = {0,268,0}; // Vertical shift of grafic 1 of 2x1 int CXSize2x1 [] = {1040,1040,880}; // Width of grafic 1 of 2x1 int CYSize2x1 [] = {500,500,1000}; // Height of grafic 1 of 2x1 input int xy = 0;//xy 0-2 //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int i,handle; int parent; handle=(int)ChartGetInteger(0,CHART_WINDOW_HANDLE);Print("ChartGetInteger(0,CHART_WINDOW_HANDLE) ",handle); //возвращает дескриптор 2688738 parent=GetParent(handle);Print("parent_0 ",parent); //возвращает дескриптор 197188 ShowWindow(parent,SW_RESTORE); i=xy; SetWindowPos(parent,0,CXShift2x1[i],CYShift2x1[i],CXSize2x1[i],CYSize2x1[i],0); //Sleep(5000); } //+------------------------------------------------------------------+ Открыть Новые дополнительные Chart-ы Но как дальше изменить размер дополнительных Chart-ов, ни как не получается.