Fragen und Antworten an Programmierer zu MQL 4 - Seite 4

 

So weit, so gut:

//+------------------------------------------------------------------+

//| Fibo trading.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#property copyright "Minodi"

#property link "minodi@yandex.ru"


extern int Zeitraum_EMA = 233,

Zeitraum_SMA = 233,

Stoploss = 30,

extern double Lot = 0,01;

extern string SesEnd ="22:00"; //Grenzzeit für Hai oder Low

//+------------------------------------------------------------------+

//| Skriptprogramm-Startfunktion |

//+------------------------------------------------------------------+

int start()

{

//------- Tagespreise, Fibs und Hi-Low-Rendering-Zeit--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); //Höchster Preis

double LoPrice = iLow(NULL,1440,shift); // niedriger Preis

double OpPrice = iOpen (NULL,1440,shift); //offener Preis

double ClPreis = iClose (NULL,1440,shift); // Schlusskurs

datetime StTime = iTime(NULL,1440,shift); // ?

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPreis = MathMin(LoPreis,iLow(NULL,1440,shift+1));

OpPreis = iOpen(NULL,1440,shift+1);

ClPreis = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPrice-LoPrice;

double Fibo138 =1,382*Bereich+LoPreis;

double Fibo162 =1,618*Bereich+LoPreis;

double Fibo_138 =LoPrice-(1.382*Range-Range);

double Fibo_162 =LoPrice-(1.618*Range-Range);

//---------------- HiTime und Low-----------------------------------------+

int HiTime,LoTime;

int time; // beim nächsten Balken rollen die Werte


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

wenn (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("Bei diesem Balken: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

if (aktuellerTag!=ZeitTag(Zeit[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;

wenn (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

double MaxDay = x - LoPrice; // Preisbereich markieren

double MinDay = x - HiPrice; // Preisspanne markieren

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------Удаление вчерашних ордеров---------------------------------+

//------------------Ордера----------------------------------------------------+

 

Liebe Forumsmitglieder, überprüfen Sie den Code, ich plane, schrittweise hinzuzufügen

 

Dies sind die Parameter, die ich Ihnen gegeben habe, setzen Sie sie ein, bevor Sie beginnen


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
Hallo, liebe Programmierer! Können Sie einem Neuling raten, wie er ein Skript (keinen Expert Advisor) schreiben kann, das einen Handelsauftrag erteilt und gleichzeitig den Trailing Stop auf einem Mindestniveau aktiviert. Vielleicht gibt es eine fertige Version, wenn Sie mir einen Link geben können.
 
Vladon >>:

Вот эти параметры ято я давал, поместите перд стартом


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


Gesetzt. Ist sonst alles in Ordnung?
 

Liebe Forumsmitglieder, bitte passen Sie auf und sagen Sie uns, welche Fehler gemacht wurden:

//+------------------------------------------------------------------+

//| Fibo trading.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#property copyright "Minodi"

#property link "minodi@yandex.ru"


extern int Zeitraum_EMA = 233,

Zeitraum_SMA = 233,

Stoploss = 30,

Magie = 55;

extern double Lot = 0,01;

extern string SesEnd ="22:00"; //Grenzzeit für Hai oder Low


int HiTime,LoTime;

int time; // beim nächsten Balken werden die Werte hochgezählt


//+------------------------------------------------------------------+

//| Skriptprogramm-Startfunktion |

//+------------------------------------------------------------------+

int start()

{

//------- Tagespreise, Fibs und Hi-Low-Rendering-Zeit--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); //Höchster Preis

double LoPrice = iLow(NULL,1440,shift); // niedriger Preis

double OpPrice = iOpen (NULL,1440,shift); //offener Preis

double ClPreis = iClose (NULL,1440,shift); // Schlusskurs

datetime StTime = iTime(NULL,1440,shift); // ?

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPreis = MathMin(LoPreis,iLow(NULL,1440,shift+1));

OpPreis = iOpen(NULL,1440,shift+1);

ClPreis = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPrice-LoPrice;

double Fibo138 =1,382*Bereich;

double Fibo162 =1,618*Bereich;

double Fibo_138 =(LoPrice-1.382*Range)-Range;

double Fibo_162 =(LoPrice-1.618*Range)-Range;

//---------------- time hai and low-----------------------------------------+


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

wenn (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("Bei diesem Balken: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

if (aktuellerTag!=ZeitTag(Zeit[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;

wenn (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

double MaxDay = x - LoPrice; // Preisbereich markieren

double MinDay = x - HiPrice; // Preisspanne markieren

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//------------------Ордера----------------------------------------------------+

wenn (HiTime>LoTime){

int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

wenn (HiTime<LoTime){

int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);

int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime>LoTime && ClPrice>Pivot) {

int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);

}

if (HiTime<LoTime && ClPrice<Pivot)

int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPreis,NULL,Magic,58000,Red);

int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);

}

zurück(0);


//+------------------------------------------------------------------+


 

auf den ersten Blick die Parameter:

int currentDay;


für den Start

 
Ich habe die Stopps vergessen und sie auf 30 Pence gesetzt.
 
Weisen Sie auf die Fehler hin, ich möchte, dass der Code funktioniert
 

Meine Herren des Forums, helfen Sie zu verstehen....

Hier ist ein Teil des Codes (der Hauptcode stammt aus dem Expert Advisor Construction Manual)

// Orderfunktion
// Globale Variablen:
// Mas_Ord_New[31][9] // Array der zuletzt bekannten Orders
// Mas_Ord_Old[31][9] // Array der vorherigen (alten) Orders
// 1. Index = Ordernummer
// [][0] ist nicht definiert
// [][1] offener Orderpreis (abs. eines Auftrags (abc-Kurs)
// [][2] StopLoss eines Auftrags (abc-Kurs)
// [][3] TakeProfit eines Auftrags (abc-Kurs)
// [][4] Auftragsnummer
// [][5] Anzahl der Lots eines Auftrags. (Abc Rate)
// [][6] Auftragsart 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] magische Zahl der Bestellung
// [][8] 0/1

if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[old][4]); // Der Kaufauftrag wurde also durch das Zählersignal geschlossen
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]) // das bedeutet, dass SL ausgelöst hat
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]) // TA ausgelöst

else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // So wird die Verkaufsorder durch das Zählersignal geschlossen
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]) // das bedeutet, dass SL ausgelöst hat
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TA ausgelöst

Der Rest ist nicht von Interesse...

Das Problem: In 90% der Fälle wird der richtige Parameter angezeigt, d.h. wenn SL ausgelöst wird, ist der Parameter "19", wenn TP "20", wenn die Order manuell oder durch ein Zählersignal geschlossen wird, ist der Parameter "1" oder "2". Das war so geplant.

Aber manchmal (ziemlich oft) wird statt "20" "19" zurückgegeben (oder umgekehrt), oder sogar "1"("2"). Bitte helfen Sie mir, die "if"-Funktion korrekt zu beschreiben: als Bedingung für den Abschluss von Aufträgen.

Ich denke, der Grund könnte in der Rundung der Preise liegen?

Grund der Beschwerde: