[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 8

 
Grazie,
 

Salve.

Ecco le mie fatiche del fine settimana. Lo sottopongo alla condanna.

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("Ordine di acquisto non aperto. Errore #", GetLastError());
}

if(CCI[1] < 100)
if(CheckOrders(OP_BUY)
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, 0, NULL, MagicNumber))
Print("Ordine di vendita non aperto. Error #", GetLastError());
}

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

Questo fa parte del codice dell'ICC. L'essenza è semplice, cci in basso >-100 comprare, cci in alto < 100 vendere


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("Ordine di acquisto non aperto. Errore #", GetLastError());
}

if(RSI[1] < 30)
if(CheckOrders(OP_BUY)
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, 0, NULL, MagicNumber))
Print("Ordine di vendita non aperto. Error #", GetLastError());

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

la parte del codice per RSI è la stessa, comprare a 70 vendere 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("Ordine di acquisto non aperto. Errore #", GetLastError());
}

if(WPR[1] < -20)
if(CheckOrders(OP_BUY))
{
if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, 0, NULL, MagicNumber))
Print("Ordine di vendita non aperto. Error #", GetLastError());
}

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

questa parte del codice per WPR (indicatore williams) compra -80, vende -20.

Ho una domanda se non sono confuso con le condizioni di trading in tutta questa cosa............Grazie mille........

 

Salve, stimati professionisti e non solo.

A mio parere, il vostro sito è il più adatto per aiutare i neofiti nell'apprendimento di MQL4.

Quando ho fatto delle domande, ho ricevuto risposte esaurienti dagli esperti. Proprio gli esperti. Ma un principiante è un principiante. Farà la domanda ancora e ancora finché non ne capirà l'essenza. Così si comportano gli scolari che hanno il desiderio di imparare qualcosa..... Forse loro (gli studenti) non sono così intelligenti come i geek, e non così intelligenti come i nerd, ma se c'è un desiderio, penso che dovrebbe essere accolto...... voglio imparare.....

Mi sono piaciute molto le risposte e i commenti di korey, grani77, vinin, YuraZ, figarO, BARS. Intelligente e intelligente. Se mi permettete, la comunicazione può essere trasferita all'indirizzo email ........... Vi ringrazio in anticipo

 
igrok2008 писал(а) >> e non intelligente come i nerd.

Oh, cavolo. Ho pensato: "Non importa quanto insegni a un pollo, non diventa più intelligente, sa solo di più".

 
Mathemat >> :

Oh, cavolo. Ho pensato: "Non importa quanto insegni a un pollo, non diventa più intelligente, impara solo di più".

Perché insegnare a un pollo? Non è nemmeno un uccello (secondo il proverbio) ..... Ma un essere umano è diverso da un pollo perché pensa. Oppure potremmo dire: "Si vive a lungo e si impara a lungo".

E ancora ripeto, sopra ho dato la mia creazione durante il fine settimana, per favore, i vostri commenti che cosa è sbagliato ..........

 

a igrok2008

Direi che lo stato attuale del trading automatizzato assomiglia alla battaglia del raccolto,
Stiamo combattendo con combinazioni, quotazioni, MQL, tester, TS glitchati dai libri e quelli fatti in casa,
ecco perché la formazione non è semplicemente risolta, non esiste ancora a causa dei molti problemi irrisolti
che vanno dal tecnico allo gnostico.
- C'è l'arte di creare MTS, ma il resto del meta commercio è un casino
quindi c'è solo un modo in cui la formazione può essere sostenuta
=Devi scegliere il problema giusto, lavorarci sopra e imparare da esso.
...
P.S. è un peccato studiare, perché invece di (avere esperienza e capacità) risolvere i problemi in MT4, devi imparare e imparare da questi problemi.
IMHO = faccia sul piano
ma non ci sono altri modi in autotrading ancora e non ci saranno ancora

 
Korey >> :

a igrok2008

lo stato attuale del commercio di auto è come la battaglia del raccolto,
stiamo combattendo con combine, quotazioni, MQL, tester, TS glitchati dai libri e quelli fatti in casa,
ecco perché la formazione non è semplicemente risolta, non esiste ancora a causa dei molti problemi irrisolti
che vanno dal tecnico allo gnostico.
- C'è l'arte di creare MTS, ma il resto del meta commercio è un casino
quindi c'è solo un modo per far funzionare la formazione
=Devi scegliere il problema giusto, lavorarci sopra e imparare da esso.
...
P.S. è un peccato studiare, perché invece di (avere esperienza e capacità) risolvere i problemi in MT4, devi imparare e imparare da questi problemi.
IMHO = faccia sul piano
ma non ci sono altri modi in autotrading ancora e non sarà mai.

Perché fa male imparare? Una persona impara e si sviluppa. Se non impara, è un processo di trasformazione in un'ameba, in uno stato unicellulare, amorfo. Quindi queste sono domande filosofiche. Sono complicati, non semplici, ed è MEGLIO discuterne davanti a una tazza di tè (40 gradi), con pasticcini (un pezzo di buona carne) e su un divano magico. ......-:)))))))

Ripeto, da16.02 (sopra) le mie creazioni. Cosa c'è di sbagliato in loro.............

 

a igrok2008

1. nessuna domanda posta, cioè dov'è la domanda posta?
2. Per rispondere alla domanda generale "cosa c'è di sbagliato in loro", è necessario eseguire questo EA a tutti, è una tecnica, ma non è adatto per i test.
Ma se è così, non c'è niente da rispondere.
3. Non hai bisogno di eseguire l'Expert Advisor se vuoi sapere del CCI, per esempio, la domanda, cos'altro è + del CCI, ma non l'hai chiesto))
3. Il codice pubblicato sul pulsante SRC è molto più facile da leggere, risparmia i tuoi occhi e il tuo tempo

 

Domande sull'indicatore:

1. Il mio commento al codice è corretto (rosso)

2. Dove è scritto nel codice di cambiare il colore dell'istogramma quando haOpen < haClose e quando haOpen > haClose

Se non vi dispiace, per favore correggete i commenti sbagliati su questo codice! Voglio davvero capirlo):

//+------------------------------------------------------------------+
//| 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
}
//+------------------------------------------------------------------+
simile |
File:
 
Gli esempi precedenti descrivono il codice di acquisto e vendita per CCI, RSI e WPR. Perché si usano esattamente questi indicatori? A mio parere, sono i più semplici per imparare a costruire un Expert Advisor. Il principio di acquisto e vendita è lo stesso per loro. meno di -100 (per CCI), -70 (per RSI) e 20 (per WPR), rispettivamente vendere sarà: +100, -30 e 80. Mi sembra (incrociato più di una volta) che gli errori siano nelle condizioni di trading, ma dove non capisco..... Si tratta del principio di SCRIVERE correttamente le condizioni di trading (credo di sì).............. Questo è quello che volevo chiederti........
Motivazione: