[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 8

 
어, 감사합니다
 

안녕하세요.

여기 내 주말 작업입니다. 나는 정죄, 즉 멸망을 위해 복종한다.

정수 시작()
{
//----
이중 CCI = NormalizeDouble (iCCI(NULL, 0, 기간, PRICE_CLOSE, 1), 자릿수);

if(CCI[1] > -100)
if(주문 확인(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, lot, Ask, 3, 0, 0, NULL, MagicNumber))
Print("구매 주문이 열리지 않았습니다. 오류 #", GetLastError());
}

if(CCI[1] < 100)
if(주문 확인(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, 랏, 입찰가, 3, 0, 0, NULL, MagicNumber))
Print("판매 주문이 열리지 않았습니다. 오류 #", GetLastError());
}

//----
리턴(0);
}

이것은 CCI 코드의 일부입니다. 본질은 간단합니다. 아래 cci > -100 구매, cci 위 < 100 매도


정수 시작()
{
//----
이중 RSI = NormalizeDouble(iRSI(NULL, 0, 기간, PRICE_CLOSE, 1), 자릿수);

if(RSI[1] > 70)
if(주문 확인(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, lot, Ask, 3, 0, 0, NULL, MagicNumber))
Print("구매 주문이 열리지 않았습니다. 오류 #", GetLastError());
}

if(RSI[1] < 30)
if(주문 확인(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, 랏, 입찰가, 3, 0, 0, NULL, MagicNumber))
Print("판매 주문이 열리지 않았습니다. 오류 #", GetLastError());

//----
리턴(0);
}

RSI에 대한 코드의 이 부분은 동일합니다. 70에 구매 30에 판매


정수 시작()
{
//----
이중 WPR = NormalizeDouble(iWPR(NULL, 0, 기간, 1), 자릿수);

if(WPR[1] > -80)
if(주문 확인(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, lot, Ask, 3, 0, 0, NULL, MagicNumber))
Print("구매 주문이 열리지 않았습니다. 오류 #", GetLastError());
}

if(WPR[1] < -20)
if(주문 확인(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, 랏, 입찰, 3, 0, 0, NULL, MagicNumber))
Print("판매 주문이 열리지 않았습니다. 오류 #", GetLastError());
}

//----
리턴(0);
}

WPR(윌리엄스 지표) 코드의 이 부분은 -80을 매수하고 -20을 매도합니다.

궁금한게 있는데 이 모든게 거래조건을 망친건지........... 감사합니다...........

 

친애하는 전문가뿐만 아니라 안녕하세요.

내 생각에 귀하의 사이트는 초보자가 MQL4 자료를 마스터하는 데 가장 적합합니다.

제가 질문한 것에 대해 SPECIALISTS로부터 철저한 답변을 받았습니다. 전문가들입니다. 하지만 뉴비는 뉴비입니다. 그는 요점을 이해할 때까지 계속해서 질문을 할 것입니다. 뭔가 배우고 싶은 의욕이 있는 학생은 이런식으로..... 아마 그들(학생)은 이마가 7경도 아니고 얼간이만큼 똑똑하지도 않지만 욕망이 있다면 그를 환영해야한다고 생각합니다 .. .... 배우고 싶다.....

korey, grani77, vinin, YuraZ, figarO, BARS의 답변과 댓글이 정말 마음에 들었습니다. 영리하고 똑똑합니다. 허락해주시면 비누로 소통가능 ........... 감사합니다.

 
igrok2008 писал(а) >> 를 썼고 괴짜만큼 똑똑하지 않습니다.

오 어떻게. 그리고 "닭은 아무리 가르쳐도 똑똑해지지 않고 더 많이 알게 될 것"이라고 생각했다.

 
Mathemat >> :

오 어떻게. 그리고 "닭은 아무리 가르쳐도 똑똑해지지 않고 더 많이 알게 될 것"이라고 생각했다.

왜 닭을 훈련시키는가? 그녀는 새도 아닙니다 (말에 따르면) ..... 글쎄, 사람은 이런 식으로 닭과 다릅니다. 그는 생각합니다. 그리고 "살고 배우기"가 가능합니다.

그러나 나는 주말에 내 작품을 가져왔다는 것을 반복합니다. plz, 내 의견이 잘못되었습니다 .......

 

igrok2008로

현재의 자동매매 상황은 추수전과 같으며,
우리는 결합, 따옴표, MQL, 테스터, 책 및 자체 제작 차량의 버그 차량으로 싸웁니다.
따라서 교육은 단순히 해결되지 않고 해결되지 않은 문제가 많기 때문에 아직 존재하지 않습니다.
기술에서 영지주의에 이르기까지 다양합니다.
- MTS를 만드는 기술이 있지만 나머지 전체 메타 거래는 엉망입니다.
따라서 훈련은 단일 변형에서 일관될 수 있습니다.
\u003d 어깨에 짊어진 작업을 선택하고 부지런히 g아 먹고 그로부터 배우십시오.
...
추신: 일반적으로 말하자면, 공부하는 것은 부끄러운 일입니다. - 왜냐하면. MT-4에서 문제를 해결하기 위해 (경험과 기술이 있는) 대신 이러한 작업에 대해 공부하고 연구하는 방법을 배워야 합니다.
IMHO = 피아노 위의 얼굴
그러나 자동 거래에는 아직 다른 방법이 없으며 앞으로도 없을 것입니다.

 
Korey >> :

igrok2008로

현재의 자동매매 상황은 추수감사절과도 같으며,
우리는 결합, 따옴표, MQL, 테스터, 책 및 자체 제작 차량의 버그 차량으로 싸웁니다.
따라서 교육은 단순히 해결되지 않고 해결되지 않은 문제가 많기 때문에 아직 존재하지 않습니다.
기술적인 것부터 영지주의적인 것까지.
- MTS를 만드는 기술이 있지만 나머지 전체 메타 거래는 엉망입니다.
따라서 훈련은 단일 변형에서 일관될 수 있습니다.
\u003d 어깨에 짊어진 작업을 선택하고 부지런히 g아 먹고 그로부터 배우십시오.
...
추신 일반적으로 말하자면, 공부하는 것은 부끄러운 일입니다. - 왜냐하면. MT-4에서 문제를 해결하기 위해 (경험과 기술이 있는) 대신 이러한 작업에 대해 공부하고 연구하는 방법을 배워야 합니다.
IMHO = 피아노 위의 얼굴
그러나 자동 거래에는 아직 다른 방법이 없으며 앞으로도 없을 것입니다.

글쎄요, 공부하는 것이 왜 부끄러운 일입니까? 결국 사람은 배우고 발전합니다. 공부하지 않으면 아메바, 단세포, 무정형 상태로 변하는 과정입니다. 기본적으로 이것은 철학적 질문입니다. 그것들은 복잡하고 쉽지 않으며, 케이크(좋은 고기 한 조각)와 함께 차 한잔(40도)과 마법의 소파에서 논의하는 것이 더 좋습니다. ......-:)))) )))

나는 16.02(위)부터 내 창조물을 반복합니다. 얘들 어떡해..............

 

igrok2008로

1. 질문을 하지 않는다. 질문이 어디에 있습니까?
2 "그들에게 무엇이 문제인가"라는 일반적인 질문에 대답하려면 일반적으로 이 어드바이저를 실행해야 합니다. - 기술은 여전히 있지만 실행에는 적합하지 않습니다.
그렇다면 대답할 것이 없습니다.
3. 질문이 CCI 소실레이터에 관한 것이라면 어드바이저 실행이 필요하지 않습니다. 예를 들어 질문이 적절합니다. - CCI에 +가 있지만 질문하지 않은 경우))
3. SRC 버튼에 게시된 코드는 훨씬 읽기 쉽고 눈과 시간을 절약합니다.

 

지표에 대한 질문:

1. 내 코드 주석이 올바른가요(빨간색)

2. 코드에서 haOpen < haClose 이고 haOpen > haClose 일 때 히스토그램 색상이 변경된 위치

어렵지 않다면 이 코드의 잘못된 주석을 수정해주세요! 나는 정말로 이해하고 싶다:

//+------------------------------------------------------------------+
//| Heiken Ashi.mq4 |
//| Copyright c 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or |
//| select on menu 'Charts'->'Properties...'): |
//| - On 'Color' Tab select 'Black' for 'Line Graph' |
//| - On 'Common' Tab disable 'Chart on Foreground' checkbox and |
//| select 'Line Chart' radiobutton |
//+------------------------------------------------------------------+

// Все, что было написано выше - стандартная лабуда
// а все, что идет ниже под грифом #property - это объявление глобальных констант.

#property copyright "Copyright © 2004, MetaQuotes Software Corp." // это могли бы и не писать
#property link "http://www.metaquotes.net" // это тоже лабудаа

#property indicator_chart_window // отображать индикатор в основном окне
#property indicator_buffers 4 // будет 4 буфера
#property indicator_color1 Red // цвет для гистограммы
#property indicator_color2 White // цвет для гистограммы
#property indicator_color3 Red // цвет для гистограммы
#property indicator_color4 White // цвет для гистограммы
#property indicator_width1 1 // толщина для гистограмм
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//---- четыре строчки ниже - это внешние переменные цветов гистограмм
extern color color1 = Red;
extern color color2 = White;
extern color color3 = Red;
extern color color4 = White;
//---- buffers вводятся переменные, которые в дальнейшем будут связаны с буферами гистограмм индикатора
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0; // вводится переменная, которой присваивается 0 - хаха , я не знаю почему не 1((
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init() // а здесь запускается специальная функция init (здесь она запускается после присоединения индикатора к окну графика, после изменения настроек эксперта)
{
//---- indicators
SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1); // здесь устанавливается тип гистограмм с порядковыми номерами линий, типом, стилем, шириной, цветом
SetIndexBuffer(0, ExtMapBuffer1); // связывает переменную-массив, объявленную на глобальном уровне с предопределенным (по порядковому номеру линии = 0)
// буфером польз.-го индикатора
. Ниже по аналогии.
SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexStyle(2,DRAW_HISTOGRAM, 0, 3, color3);
SetIndexBuffer(2, ExtMapBuffer3);
SetIndexStyle(3,DRAW_HISTOGRAM, 0, 3, color4);
SetIndexBuffer(3, ExtMapBuffer4);
//---- // установка порядкового номера бара от начала данных для отрисовки указанной линии
SetIndexDrawBegin(0,10); // порядковый номер линии = 0. хаха не понятно, эта линия будет рисоваться на основании 11 быров с учетом нулевого?(( индикатор отрисован
// по гораздо большему количеству баров((. ниже по аналогии
SetIndexDrawBegin(1,10);
SetIndexDrawBegin(2,10);
SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer1); // а зачем повторять ведь это же уже было написано выше, наверное автор этого индикатора захотел меня запутать!))
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexBuffer(3,ExtMapBuffer4);
//---- initialization done
return(0); // на этом специальная функция init завершается. Только почему в скобках у return ноль?? - непонятно((
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() // а тут специальная функция deinit, которая не используется
{
//---- TODO: add your code here

//----
return(0); // гуд бай deinit
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() //это основная функция индикатора запускается на каждом новом тике
{
double haOpen, haHigh, haLow, haClose; //вводятся локальные дробные переменные
if(Bars<=10) return(0); //оператор if с условием если баров yна рафике меньше или равно10 - закрывать функцию start
ExtCountedBars=IndicatorCounted(); //переменной ExtCountedBars присваивается значение количества баров в окне терминала.
// а чем отличается
функция IndicatorCounted () от Bars?
//---- check for possible errors
if (ExtCountedBars<0) return(-1); //ну вот, еще один if - если переменная ExtCountedBars < нуля ?завершение функции start? почему return с (-1)? - Непонятно((
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars--; // а если ExtCountedBars больше нуля, от этого количества баров отнимается единица.
//Осуществляется переход на один бар ближе к нулевому - если я правильно понимаю
int pos=Bars-ExtCountedBars-1; //Вводиться и рассчитывается переменная pos - указатель на бар, с которого будет вестись расчет
while(pos>=0) //Запуск цикла while с условием, что pos должна быть больше или равна нулю. Цикл будет повторяться при каждом новом тике
//(при соблюдении условия).
{
haOpen=(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2; //вводится и рассчитывается переменная haOpen на основании(суммы 2-х буферов 3-го и 4-го со смещением на один
//бар вперед)потом это на 2 делится
//когда цикл while снова повториться к pos будет изменена, чтобы не считать уже вычесленное значение индикаторов?

haClose=(Open[pos]+High[pos]+Low[pos]+Close[pos])/4; //вводится и рассчитывается переменная haClose на основании суммы цен открытия, максимума, минимума и закрытия
//бара начала рассчета
haHigh=MathMax(High[pos], MathMax(haOpen, haClose)); //вводиться и рассчитывается переменная haHigh на основании функции возврата максимального из двух числовых
//максимума текущего бара pos и максимального из 2-х числовых значений (haOpen и haClose)
haLow=MathMin(Low[pos], MathMin(haOpen, haClose)); //значений, то же что и строкой выше - только рассчитывается минимальное значение
if (haOpen<haClose) //если haOpen меньше haClose
{
ExtMapBuffer1[pos]=haLow; //тогда значение Буфер 1 по pos равено haLow
ExtMapBuffer2[pos]=haHigh; //и значение буфера 2 по pos равно haHight
}
else //а если условие ложно и haOpen больше или равно haClose
{
ExtMapBuffer1[pos]=haHigh; //тогда наоборот значение Буфер 1 по pos равно haHigh t
ExtMapBuffer2[pos]=haLow ; //а значение Буфера 2 по pos равно haLow
}
ExtMapBuffer3[pos]=haOpen; //в любом случае значение Буфера3 по pos равно haOpen
ExtMapBuffer4[pos]=haClose; //а значение буфера 4 по pos равно haClose
pos--; / /уменьшаем pos на единицу (ближе к нулевому бару) и повторяем цикл while сначала при соблюдении его условия
}
//----
return(0); //а если условие не соблюлось, выход из цикла while и конец функции start
}
//+------------------------------------------------------------------+
비슷한 |
파일:
 
위의 예는 CCI, RSI 및 WPR에 대한 구매 및 판매 코드를 설명합니다. 이러한 지표를 사용하는 이유는 무엇입니까? 제 생각에는 Expert Advisors 구축의 원칙을 마스터하는 데 가장 간단합니다. 매매의 원칙은 그들에게 동일합니다. 각각 -100(CCI의 경우), -70(RSI의 경우) 및 20(WPR의 경우) 미만이면 판매가: +100, -30 및 80이 됩니다. 제 생각에는 (나는 한 번 이상 세례를 받은 것 같습니다) 매매조건에 오류가 있는것 같은데 이해가 안가는 부분이..... 여기서 요점은 매매조건의 CORRECT WRITING 원칙(그렇다고 생각합니다) ............ ... 그건 내가 당신에게 묻고 싶었던 것입니다 .......