Hilfe bei der Codierung - Seite 238

 

Gibt es eine Möglichkeit, Optionen zur Auswahl hinzuzufügen?

Zum Beispiel,

Getrennt, Kauf, und Verkauf getrennt

Modifikation: BE alle kaufen 0, oder +1, oder +2 Pips oder verkaufen alle BE 0, 1 oder 2 Pips?

Ist das möglich?

be.mq4

Dateien:
be.mq4  1 kb
 

Hallo Mladen ,

Kann mir bitte jemand sagen, was ich falsch mache, ich schreibe meist meine ea mit FX Gen mit Snippets und Codes mit Beispielen aus mq4 Compiler und Online-Foren.Im versucht, meine Strategie für einfacheren Handel Code, ive in der Lage, die letzte Bestellung erfolgreich mit diesem Code zu wählen.

void OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // Keine offen.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& Ask - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuyOrder();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - Bid >= Grid*PipValue*Point

{

{

SellOrder();

}

}

}

return(lastTicket);

}

sonst

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

Können Sie sich diesen Code ansehen? Ich versuche, die älteste Bestellung zuerst zu löschen, indem ich den Zeitpunkt und das Bestellungs-Ticket verwende, z.B. wenn die geöffnete Bestellung >2 ist, wird die älteste Bestellung gelöscht.

//-------------------------------------------------------------

// Etasoft Inc. Forex EA und Script Generator Version 4.1 EA

//-------------------------------------------------------------

// Schlüsselwörter: MT4, Forex EA builder, EA erstellen, expert advisor developer

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"

#property link

#include

#include

// exportierte Variablen

extern int OrderId = 1;

extern int Schlupf = 2;

extern double Lots = 0.01;

extern int MaxOrdersAllowed = 2;// op buy und op sell erlaubt

extern int Grid = 10; // Gesamtabstand in Pips zu offenen Aufträgen

extern string EAComment = "564 testing";

// lokale Variablen

double PipValue=1; // diese Variable dient der Unterstützung von 5-stelligen Brokern

bool Terminated = false;

string LF = "\n"; // zu verwenden in benutzerdefinierten oder Utility-Blöcken, in denen Zeilenvorschübe benötigt werden

int NDigits = 4; // wird meist für NormalizeDouble in Flex-Blöcken verwendet

int ObjCount = 0; // Zählung aller im Diagramm erstellten Objekte, ermöglicht die Erstellung von Objekten mit eindeutigen Namen

int aktuell = 0;

int init()

{

NDigits = Digits;

if (false) ObjectsDeleteAll(); // Löschen des Diagramms

Comment(""); // Löschen des Diagramms

}

// Expertenstart

int start()

{

if (Balken < 10)

{

Kommentar("Nicht genug Balken");

return (0);

}

if (Terminated == true)

{

Comment("EA Terminated.");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

MaximumOrder();

}

void IfOrderDoesNotExist2()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

existiert = true;

}

}

sonst

{

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

if (exists == false)

{

BuyPendingOrder();

}

}

void IfOrderDoesNotExist4()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

existiert = true;

}

}

sonst

{

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

if (exists == false)

{

SellPendingOrder();

}

}

void BuyPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;

double SL = Preis - 0*PipValue*Point;

wenn (0 == 0) SL = 0;

double TP = Preis + 0*PipValue*Point;

wenn (0 == 0) TP = 0;

wenn (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);

if (ticket == -1)

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

}

void SellPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

double SL = Preis + 0*PipValue*Point;

wenn (0 == 0) SL = 0;

double TP = Preis - 0*PipValue*Point;

wenn (0 == 0) TP = 0;

wenn (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);

if (ticket == -1)

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

OrderCount();

}

}

void OrderCount()

{

int count = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (AuftragSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

count++;

}

}

sonst

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

if (Anzahl > MaxOrdersAllowed )

{

DeleteOldestOrder();

}

}

void DeleteOldestOrder()

{

datetime lastTime = 0;

int lastTicket = -1; // Keine offen.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

return(lastTicket);

}

sonst

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

int deinit()

{

if (false) ObjectsDeleteAll();

}

 
sulaimoney:
Hallo Mladen ,

Kann jemand bitte sagen Sie mir, was im falsch machen, ich meist schreiben meine ea mit FX Gen mit Snippets und Codes mit Beispielen aus mq4 Compiler und online forums.Im versuchen, meine Strategie für leichteren Handel Code, ive in der Lage, die letzte Bestellung erfolgreich mit diesem Code auswählen.

void OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // Keine offen.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& Ask - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuyOrder();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - Bid >= Grid*PipValue*Point

{

{

SellOrder();

}

}

}

return(lastTicket);

}

sonst

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

Können Sie sich diesen Code ansehen? Ich versuche, die älteste Bestellung zuerst zu löschen, indem ich den Zeitpunkt und das Bestellungs-Ticket verwende, z.B. wenn die geöffnete Bestellung >2 ist, wird die älteste Bestellung gelöscht.

//-------------------------------------------------------------

// Etasoft Inc. Forex EA und Script Generator Version 4.1 EA

//-------------------------------------------------------------

// Schlüsselwörter: MT4, Forex EA builder, EA erstellen, expert advisor developer

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"

#property link

#include

#include

// exportierte Variablen

extern int OrderId = 1;

extern int Schlupf = 2;

extern double Lots = 0.01;

extern int MaxOrdersAllowed = 2;// op buy und op sell erlaubt

extern int Grid = 10; // Gesamtabstand in Pips zu offenen Aufträgen

extern string EAComment = "564 testing";

// lokale Variablen

double PipValue=1; // diese Variable dient der Unterstützung von 5-stelligen Brokern

bool Terminated = false;

string LF = "\n"; // zu verwenden in benutzerdefinierten oder Utility-Blöcken, in denen Zeilenvorschübe benötigt werden

int NDigits = 4; // wird meist für NormalizeDouble in Flex-Blöcken verwendet

int ObjCount = 0; // Zählung aller im Diagramm erstellten Objekte, ermöglicht die Erstellung von Objekten mit eindeutigen Namen

int aktuell = 0;

int init()

{

NDigits = Digits;

if (false) ObjectsDeleteAll(); // Löschen des Diagramms

Comment(""); // Löschen des Diagramms

}

// Expertenstart

int start()

{

if (Balken < 10)

{

Kommentar("Nicht genug Balken");

return (0);

}

if (Terminated == true)

{

Comment("EA Terminated.");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

MaximumOrder();

}

void IfOrderDoesNotExist2()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

existiert = true;

}

}

sonst

{

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

if (exists == false)

{

BuyPendingOrder();

}

}

void IfOrderDoesNotExist4()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

existiert = true;

}

}

sonst

{

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

if (exists == false)

{

SellPendingOrder();

}

}

void BuyPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;

double SL = Preis - 0*PipValue*Point;

wenn (0 == 0) SL = 0;

double TP = Preis + 0*PipValue*Point;

wenn (0 == 0) TP = 0;

wenn (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);

if (ticket == -1)

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

}

void SellPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

double SL = Preis + 0*PipValue*Point;

wenn (0 == 0) SL = 0;

double TP = Preis - 0*PipValue*Point;

wenn (0 == 0) TP = 0;

wenn (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);

if (ticket == -1)

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

OrderCount();

}

}

void OrderCount()

{

int count = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (AuftragSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

count++;

}

}

sonst

{

Print("OrderSend() Fehler - ", ErrorDescription(GetLastError()));

}

if (Anzahl > MaxOrdersAllowed )

{

DeleteOldestOrder();

}

}

void DeleteOldestOrder()

{

datetime lastTime = 0;

int lastTicket = -1; // Keine offen.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

return(lastTicket);

}

sonst

Print("OrderSelect() Fehler - ", ErrorDescription(GetLastError()));

}

int deinit()

{

if (false) ObjectsDeleteAll();

}

Versuchen Sie, eine Funktion wie diese zu verwenden:

void DeleteOldestOrder()

{

datetime lastTime = Time[0]+Period()*60;

int lastTicket = -1; // None open.

for (int i=OrdersTotal()-1; i >= 0; i--)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

}

if (lastTicket>-1)

if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}
 

Danke Mladen

es hat einwandfrei funktioniert. Übrigens entschuldige ich mich dafür, dass ich einen so langen Code ins Forum gestellt habe. Ich muss mich noch an die Schnittstelle gewöhnen. Vielen Dank!

 

Der Indikator wird nicht automatisch aktualisiert.

Hier habe ich einen Indikator, der für meinen Handel sehr gut geeignet ist.

Leider aktualisiert er sich nicht von selbst. Ich muss immer manuell aktualisieren, dass er erneuert wird.

Gibt es eine Möglichkeit, dieses Problem zu lösen?

Es wäre sehr hilfreich !!

Vielen Dank im Voraus.

P.S.: Anbei alles was ich habe.

Dateien:
 

Er will die Benachrichtigung per SMS. Wie sieht der Code aus?

 
popej30:
Er will die Benachrichtigung per SMS. Wie sieht der Code aus?

popej30

Gehen Sie wie folgt vor:

SendNotification("Benachrichtigungsnachricht, die Sie senden möchten");

 

Und wo geben Sie Ihre Telefonnummer ein? Meine Nummer 0039 555-23-45. Wo geben Sie ein ?

Beispiel:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}
 
popej30:
Und wo geben Sie Ihre Telefonnummer ein? Meine Nummer 0039 555-23-45. Wo geben Sie ein ?

Beispiel:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}

Hier ist eine gute Erklärung, wie Sie das machen können:

 
Jim Clark:
Der Indikator wird nicht automatisch aktualisiert.

Hier habe ich einen Indikator, der für meinen Handel sehr gut geeignet ist.

Leider aktualisiert er sich nicht von selbst. Ich muss immer manuell aktualisieren, dass er erneuert wird.

Gibt es eine Möglichkeit, dieses Problem zu lösen?

Es wäre sehr hilfreich !!

Vielen Dank im Voraus.

P.S.: Anbei alles, was ich habe.

Jim

Anstatt die ganze Sache neu zu schreiben, füge ein Limit für die Berechnung der Balken hinzu und dann werden alle diese Balken neu berechnet. Das sollte das Aktualisierungsproblem lösen (halten Sie den BarsTocalculate auf einem vernünftigen - nicht zu großen, nicht zu kleinen - Wert. Ich habe 1000 als Standardwert verwendet, und das scheint in Ordnung zu sein). Probieren Sie es aus

Dateien: