Wie programmiert man? - Seite 319

 
Tomcat98:
Hallo Programmierer,

Wie kann man einige zusätzliche Codezeilen programmieren, damit ein Experte nach einem erfolgreichen Handel stoppt?

Pips sind in der Tasche, dann machen die Experten stoppt...

Vielen Dank

Tomcat98

Siehe unten, wenn Sie etwas Erfahrung im Programmieren haben. Andernfalls holen Sie sich einen Programmierer.

1) Führen Sie nach jedem Handelsabschluss eine Schleife in OrdersHistoryTotal() aus, um die Trades zu überprüfen.

2) Prüfen Sie, ob der letzte Handel geschlossen wurde (OrderCloseTime()).

3) wenn letzter Abschluss, OrderProfit() == Gewinn prüfen.

Wenn in profit == true, setze EndDayTrade == true && LastTradeDay == DayofYear().

Wenn in profit == false, setze EndDayTrade == false.

4) Wenn das Programm start() durchläuft, müssen Sie ==> if EndDayTrade == false einfügen, bevor Sie einen neuen Handel starten. Da es wahr ist, wird es keine neuen Geschäfte auslösen.

5) Sie benötigen eine Timer-Funktion, um den neuen Tag zu prüfen. (vorausgesetzt, der neue Tag ist das, was neue Geschäfte auslösen soll)

Die einfachste Form wäre if (LastDay != DayofYear() ).

6) innerhalb der obigen Timer-Funktion, setzen Sie LastDay = DayofYear().

if ( LastTradeDay != DayofYear() && EndDayTrade == true)

setze EndDayTrade == false, was wieder von vorne beginnt.

Benutzerdefinierte Variablen

bool EndDayTrade = false;

int LastTradeDay = 9999999;

int LastDay = 999999;

Ich hoffe, diese Erklärung ist klar genug.

 
dasio:
Hallo,

Ich versuche, diese beiden Codes zusammenzuführen, aber ich habe Probleme damit.

Ich brauche, dass, wenn eine schwebende Bestellung gefüllt ist, die andere storniert werden muss.

Vielen Dank für Ihre Bereitschaft

int opened =0;

int pending =0;

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

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

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

Kann mir jemand helfen?

 

dasio

Versuchen Sie, den gesamten Code an den Anfang der start()-Prozedur zu stellen. Wahrscheinlich müssen Sie noch etwas herausfiltern, wenn Sie schwebende Aufträge öffnen, aber wenn Sie diesen Code am Anfang platzieren, wird er schwebende Aufträge bereinigen, wenn einer der zuvor geöffneten schwebenden Aufträge zu einem "normalen" Auftrag wird.

dasio:
Kann jemand helfen?
 

Hallo,

ich lerne eine Menge aus diesem Thread, deshalb stelle ich weiterhin Fragen.

Nun. Ich versuche es alleine zu machen aber ich habe keinen Erfolg.

Prämisse ich möchte diesen Indikator in einem offline Renko Chart verwenden.

Mein Ziel ist es, über oder unter der Kerze zu plotten, wie lange hat die Konstruktion.

Also ich weiß, dass in der Spezifikation der Kerze gibt es die Zeit, wenn es geöffnet. Also, wenn ich die Zeit der aktuellen Kerze minus die Kerze der vorherigen ich habe, was ich brauche.

Also wie kann ich es codieren?

Ich danke Ihnen sehr viel

 

Kann nicht herausfinden, warum dieser Code versucht, geschlossene Orders zu ändern

Ich habe die OrderCloseTime() zu beiden if-Anweisungen hinzugefügt, weil ich dachte, das würde diesem ungültigen Ticket für die ordermodify-Funktion ein Ende setzen, aber hin und wieder verliert mein EA die Kontrolle über alle Aufträge und mischt irgendwie einen geschlossenen Handel ein und versucht ständig, ihn immer wieder zu ändern, was riesige Protokolldateien erzeugt und den Handel nicht fortsetzt, bis ich den MT4 neu starte. Ich bin mir nicht ganz sicher, wie es eine geschlossene Order aufnimmt, vielleicht während es dabei ist, alle Orders zu modifizieren, schließt sich eine von ihnen in dieser kurzen Zeit und wirft es ab? Wie gesagt, das passiert vielleicht zweimal von 30-50 Trades pro Tag.

Hat irgendjemand eine Idee, wie man dem ein Ende setzen kann?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Signal Probleme

mladen

Bitte ich möchte ein Skript hosten, das Handelswarnungen an mehrere Empfänger sendet, wie Hunderte von ihnen, wie kann ich das tun... Gibt es Unternehmen, die damit umgehen können, die Sie oder jemand auf diesem Forum kennen.

Mastercash:
Mladen Vielen Dank, ich habe genau hingesehen....Im Moment experimentiere ich noch mit dem Code.Ich werde Sie benachrichtigen, wenn ich fertig bin.
 

...

2 Gedanken :

1. Wenn Sie es verschicken wollen, dann denke ich, dass der einzig vernünftige Weg das Versenden von E-Mails ist, und warum benutzen Sie in diesem Fall nicht einfach eines der E-Mail-Spamming-Programme, die es in freier Wildbahn gibt?

2. Das Senden von Signalen hat zu viele Probleme (das ist meine Meinung, einige der Probleme beim Senden sind praktisch unlösbar). Warum kehren Sie die Logik nicht um: Statt zu senden, erstellen Sie einen Code, der von einem bestimmten Ort aus gelesen wird (mit Benutzernamen, Passwort usw.), und auf diese Weise haben Sie fast alle Probleme gelöst, die das Senden nicht lösen kann (einschließlich der Verhinderung der Nutzung von mehreren IPs gleichzeitig).

So, nur ein paar Gedanken ...

Mastercash:
mladen Vielen Dank, dass der Code ist jetzt working.The alert nicht mehr wiederholen sich.Please Ich möchte ein Skript, das den Handel Alarme an mehrere Empfänger, wie Hunderte von ihnen, wie kann ich das tun zu hosten...Gibt es Unternehmen, die damit umgehen können, die Sie oder jemand auf diesem Forum wissen.
 

Versuchen Sie etwas wie dies:

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)

{

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

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
Ich habe die OrderCloseTime() zu beiden if-Anweisungen hinzugefügt, weil ich dachte, das würde diesem Fehler mit dem ungültigen Ticket für die ordermodify-Funktion ein Ende setzen, aber hin und wieder verliert mein EA die Kontrolle über alle Aufträge und vermischt irgendwie einen geschlossenen Handel und versucht ständig, ihn immer wieder zu ändern, was zu riesigen Logdateien führt und den Handel nicht fortsetzen kann, bis ich den MT4 neu starte. Ich bin mir nicht ganz sicher, wie es eine geschlossene Order aufnimmt, vielleicht während es dabei ist, alle Orders zu modifizieren, schließt sich eine von ihnen in dieser kurzen Zeit und wirft es ab? Wie ich schon sagte, wird dies vielleicht zweimal von 30-50 Trades pro Tag passieren.

Hat jemand eine Idee, wie man das beenden kann?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Alert-Lösungen

Ich glaube, ich brauche mehr Erklärungen zu diesem Thema, können Sie mir einen Tipp geben, wie ich einen Code schreiben und einrichten kann, der mir hilft, den Alarm an alle meine Kunden gleichzeitig zu senden, indem ich ihre E-Mail-Adresse in der Datenbank speichere ....., aber wie wird die Server-Sprache, z.B. php-Skript, die Alarme von der mt4-Plattform automatisch sammeln? ......Ich glaube, das ist das Problem, wenn es einen Weg gibt, kann es an mehrere Handys oder E-Mail-Adressen gesendet werden, Ihr Rat, bitte?

mladen:
2 Gedanken :

1. Wenn Sie gehen, um es zu senden, dann denke ich, dass der einzige vernünftige Weg ist das Senden von E-Mail und in diesem Fall, warum Sie nicht einfach eine der E-Mail-Spamming-Programme, die es in der Wildnis?

2. Das Senden von Signalen hat zu viele Probleme (das ist meine Meinung, einige der Probleme beim Senden sind praktisch unlösbar). Warum kehren Sie die Logik nicht um: Anstatt zu senden, erstellen Sie einen Code, der von einem bestimmten Ort aus gelesen wird (mit Benutzername, Passwort usw.), und auf diese Weise haben Sie fast alle Probleme gelöst, die beim Senden nicht gelöst werden können (einschließlich der Verhinderung der Nutzung von mehreren IPs gleichzeitig).

Also, nur ein paar Gedanken ...
 

Mastercash

Versuchen Sie, "Massen-E-Mails senden" zu googeln, und ich denke, dass Sie eine Antwort darauf finden werden.

Was das "Sammeln von Alarmen" angeht: Sie müssen etwas haben, das sie in ein lesbares Format"exportiert", das dann von einer Software Ihrer Wahl erkannt wird, die Signale verteilt oder den Zugang zu diesen Signalen ermöglicht

PS: Signalisierungsdienste sind viel komplexer, als es auf den ersten Blick aussieht, und wenn Sie vorhaben, einen solchen Dienst einzurichten, können Sie mit erheblichen Kosten rechnen, damit er so funktioniert, wie er sollte

Mastercash:
Ich glaube, ich brauche mehr Erklärungen zu diesem Thema, können Sie mir einen Tipp geben, wie ich einen Code schreibe und einrichte, der mir hilft, den Alarm an alle meine Kunden gleichzeitig zu senden, indem ich ihre E-Mail-Adressen in der Datenbank speichere....., aber wie wird die Server-Sprache, z.B. php-Skript, die Alarme von der mt4-Plattform automatisch sammeln? ...... Ich glaube, das ist das Problem, wenn es einen Weg gibt, kann es an mehrere Mobiltelefone oder E-Mail-Adressen gesendet werden, Ihr Rat, bitte?