[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 8

 
Gracias,
 

Hola.

Aquí están mis trabajos del fin de semana. Lo someto a condena.

int start()
{
//----
double CCI = NormalizeDouble(iCCI(NULL, 0,Period,PRICE_CLOSE,1), Digits);

if(CCI[1] > -100)
if(CheckOrders(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
Print("Orden de compra no abierta. Error #", GetLastError());
}

if(CCI[1] < 100)
if(CheckOrders(OP_BUY)
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
Print("Orden de venta no abierta. Error #", GetLastError());
}

//----
return(0);
}

Esto es parte del código de la CCI. La esencia es simple, cci en la parte inferior >-100 comprar, cci en la parte superior < 100 vender


int start()
{
//----
double RSI = NormalizeDouble(iRSI(NULL, 0,Period,PRICE_CLOSE,1), Digits);

if(RSI[1] > 70)
if(CheckOrders(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
Print("Orden de compra no abierta. Error #", GetLastError());
}

if(RSI[1] < 30)
if(CheckOrders(OP_BUY)
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
Print("Orden de venta no abierta. Error #", GetLastError());

//----
return(0);
}

la parte del código para el RSI es la misma, comprar a 70 vender a 30


int start()
{
//----
double WPR = NormalizeDouble(iWPR(NULL, 0,Period,1), Digits);

if(WPR[1] > -80)
if(CheckOrders(OP_SELL))
{
if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
Print("Orden de compra no abierta. Error #", GetLastError());
}

if(WPR[1] < -20)
if(CheckOrders(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
Print("Orden de venta no abierta. Error #", GetLastError());
}

//----
return(0);
}

esta parte del código para WPR (indicador williams) comprar -80, vender -20.

Tengo una pregunta si no estoy confundido con las condiciones de negociación en todo esto............Muchas gracias........

 

Hola, estimados profesionales y no sólo.

En mi opinión, su sitio web es el más adecuado para ayudar a los novatos en el aprendizaje de MQL4.

Cuando hice preguntas, obtuve respuestas completas de los expertos. Precisamente los expertos. Pero un principiante es un principiante. Hará la pregunta una y otra vez hasta que comprenda su esencia. Así se comportan los escolares que tienen el deseo de aprender algo..... Tal vez ellos (los estudiantes) no son tan inteligentes como los geeks, y no tan inteligentes como los nerds, pero si hay un deseo, creo que debe ser acogido...... Quiero aprender.....

Me han gustado mucho las respuestas y comentarios de korey, grani77, vinin, YuraZ, figarO, BARS. Inteligente y avispado. Si me permite, la comunicación puede ser transferida a ............. Gracias de antemano

 
igrok2008 писал(а) >> y no tan inteligente como los nerds.

Oh, vaya. Pensé: "Por mucho que le enseñes a una gallina, no se vuelve más inteligente, sólo se vuelve más inteligente".

 
Mathemat >> :

Oh, vaya. Pensé: "Por mucho que le enseñes a una gallina, no se vuelve más inteligente, sólo aprende más".

¿Por qué enseñar a una gallina? Ni siquiera es un pájaro (según el proverbio) ..... Bueno, esa es la diferencia entre un hombre y una gallina - piensa. O podríamos decir: "Se vive mucho y se aprende mucho".

Y sigo repitiendo, arriba di mi creación durante el fin de semana, por favor, sus comentarios lo que está mal ..........

 

a igrok2008

Yo diría que el estado actual del comercio automatizado se parece a la Batalla de la Cosecha,
Nos peleamos con las cosechadoras, las cotizaciones, los MQL, los probadores, los TS con fallos de los libros y los caseros,
por eso la formación simplemente no está resuelta, no existe todavía por los muchos problemas no resueltos
que van de lo técnico a lo gnóstico.
- Existe el arte de crear MTS, pero el resto del meta comercio es un desastre
por lo que sólo hay una forma de que la formación funcione
= Hay que elegir el problema adecuado, trabajar en él y aprender de él.
...
P.D. es una pena estudiar, porque en lugar de (tener experiencia y habilidades) resolver problemas en MT4, hay que aprender y aprender de estos problemas.
IMHO = cara en el piano
pero no hay otras formas en el autotrading todavía y no las habrá

 
Korey >> :

a igrok2008

el estado actual del comercio de automóviles es como la Batalla de la Cosecha,
estamos luchando con combine, quotes, MQL, tester, glitchy TS de libros y caseros,
por eso la formación simplemente no está resuelta, no existe todavía por los muchos problemas no resueltos
que van de lo técnico a lo gnóstico.
- Existe el arte de crear MTS, pero el resto del meta comercio es un desastre
por lo que sólo hay una forma de mantener la formación
= Hay que elegir el problema adecuado, trabajar en él y aprender de él.
...
P.D. es una pena estudiar, porque en lugar de (tener experiencia y habilidades) resolver problemas en MT4, hay que aprender y aprender de estos problemas.
IMHO = cara en el piano
pero no hay otras formas en el autotrading todavía y nunca las habrá.

¿Por qué duele aprender? Una persona aprende y se desarrolla. Si no aprende, es un proceso de transformación en ameba, en un estado unicelular, amorfo. Se trata, pues, de cuestiones filosóficas. Son complicados, no simples, y es MEJOR discutirlos con una taza de té (40 grados), con pastas (un trozo de buena carne) y en un sofá mágico. ......-:)))))))

Repito, desde el 16.02 (arriba) mis creaciones. Qué pasa con ellos.............

 

a igrok2008

1. la pregunta no se formula, es decir, ¿dónde se plantea la pregunta?
2. Para responder a la pregunta general "¿qué les pasa?", es necesario ejecutar este EA en absoluto, es una técnica, pero no es adecuado para las pruebas.
Pero si lo es, no hay nada que responder.
3. No hace falta un test, si la pregunta es sobre CCI, por ejemplo, la pregunta sobre otra cosa + CCI es apropiada, pero no la has hecho))
3. El código publicado en el botón SRC es mucho más fácil de leer, ahorra tus ojos y tu tiempo

 

Preguntas sobre el indicador:

1. Mi comentario al código es correcto (en rojo)

2. En qué parte del código está escrito el cambio de color del histograma cuando haOpen < haClose y cuando haOpen > haClose

Si no le importa, por favor, corrija los comentarios erróneos de este código. Realmente quiero entenderlo):

//+------------------------------------------------------------------+
//| 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
}
//+------------------------------------------------------------------+
similar |
Archivos adjuntos:
 
Los ejemplos anteriores describen el código de compra y venta para CCI, RSI y WPR. ¿Por qué se utilizan exactamente estos indicadores? En mi opinión, son los más fáciles de aprender a construir un Asesor Experto. El principio de compra y venta es el mismo para ellos. menos de -100 (para CCI), -70 (para RSI) y 20 (para WPR), respectivamente la venta será: +100, -30 y 80. Me parece (cruzado más de una vez) que los errores están en las condiciones comerciales, pero donde no entiendo..... Se trata del principio de ESCRIBIR correctamente las condiciones de negociación (eso creo).............. Eso es lo que quería preguntarte........