Wie programmiert man? - Seite 265

 

Unbekannte Teilfensternummer

Hallo, liebe Programmierer

Hat jemand eine Lösung für dieses Problem mit iCustom-Aufrufen? Ich habe alles ausprobiert, was mir einfällt, aber ich habe immer noch dieselbe Meldung auf der Registerkarte Experten.

Unbekannte Unterfensternummer -1 für die Funktion ObjectCreate

Mit freundlichen Grüßen CJA

 

Entfernen Sie die Subwindow-Aufrufe im Indikator

cja:
Hallo liebe Coderkollegen

Hat jemand eine Lösung für dieses Problem mit iCustom-Aufrufen? Ich habe alles ausprobiert, was mir einfällt, aber ich habe immer noch dieselbe Meldung auf der Registerkarte Experten.

Unbekannte Subwindow-Nummer -1 für ObjectCreate-Funktion

Mit freundlichen Grüßen CJA

Hallo CJA!

ich habe eine Lösung, mit der ich dieses Problem umgehen kann.

Der Indikator, den Ihr EA im iCustom aufruft, versucht, ein Unterfenster zu finden, um seine Objekte zu zeichnen.

In den meisten Fällen muss Ihr Indikator nichts zeichnen, sondern nur die Indikatorwerte an Ihren EA weitergeben.

Meine Lösung besteht darin, eine Kopie des Indikators zu erstellen und die Aufrufe des Unterfensters und die Routinen zum Zeichnen von Objekten zu löschen.

Dadurch werden die Subwindow-Fehler beseitigt und der EA läuft auch schneller.

Verwenden Sie dann diesen neuen Indikatornamen in Ihren iCustom-Anweisungen für Ihren EA.

Ich bin mir sicher, dass es eine bessere Lösung gibt, aber bei mir funktioniert es so.

Hoffentlich hilft das,

Robert

 

iCustom Unterfenster-Fehler

cosmiclifeform:
Hallo CJA,

Ich habe eine Lösung, die ich verwende, um dieses Problem zu umgehen.

Der Indikator, den Ihr EA im iCustom aufruft, versucht, ein Unterfenster zum Zeichnen seiner Objekte zu finden.

In den meisten Fällen muss Ihr Indikator nichts zeichnen, sondern nur die Indikatorwerte an Ihren EA weitergeben.

Meine Lösung besteht darin, eine Kopie des Indikators zu erstellen und die Aufrufe des Unterfensters und die Routinen zum Zeichnen von Objekten zu löschen.

Dadurch werden die Subwindow-Fehler beseitigt und der EA läuft auch schneller.

Verwenden Sie dann diesen neuen Indikatornamen in Ihren iCustom-Anweisungen für Ihren EA.

Ich bin mir sicher, dass es eine bessere Code-Lösung gibt, aber bei mir funktioniert das.

Hoffentlich hilft das,

Robert

Danke Robert - dein Vorschlag funktioniert, aber ich vermute, dass es noch eine andere Möglichkeit gibt, obwohl ich im Netz gesucht habe und keine funktionierenden oder sinnvollen Lösungen gefunden habe, nur eine Menge Fragen und keine Antworten. Also noch einmal vielen Dank für Ihre Hilfe.

Mit freundlichen Grüßen CJA

 

CJA

Nur ein Vorschlag: Warum verwenden Sie nicht (beim Aufruf mit iCustom()) einen Parameter zur Übergabe der gewünschten Fensternummer? So etwas wie: wenn (ParameterWindowID>=0), dann ist es von iCustom, ansonsten wird ein Standardcode ausgeführt.

Auf diese Weise könnte man das Zeichnen von Objekten erzwingen, auch wenn es von einem anderen Code aufgerufen wird, und es würde die Objekte an der richtigen Stelle zeichnen.

 

Hilfe bei der Codierung

Hallo Leute.

Kann mir jemand sagen, ob es möglich ist, BOLD textFONTtype in einem E-Mail-Warnbericht zu verwenden? Wenn ja, wie kann ich dies codieren?

Vielen Dank für die Hilfe.

 
codersguru:
Meinen Sie, wie man in eine CSV-Datei speichert?

Prüfen Sie das:

Werkzeuge - .csv-Reader

Hallo, Guru,

Kann ich diese Dll irgendwo von Ihrer Website herunterladen? Ich denke, dies ist ein hervorragendes Tool und ich bin mir ziemlich sicher, dass Sie es besser schreiben können als ich, also werde ich mich nicht damit herumschlagen. Vielen Dank im Voraus.

Muss ich mich registrieren? Es befindet sich im Download-Bereich, aber ich konnte nicht herausfinden, wie man etwas herunterlädt.

 

schnelle EA-Änderung

Hallo!

Ich brauche etwas Hilfe, ich habe versucht, den Code unten zu ändern, aber der EA stürzte immer wieder MT4 ab.

Ich möchte, dass die Bestellung zu schließen, wenn der aktuelle bar (also die Bar, wo die Bestellung ausgeführt wurde) schließt. Grundsätzlich wird ein Balken gehandelt.

Dies ist der ursprüngliche Code, er handelt von Signal zu Signal.

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

//| Signal Begin(Exit Buy) |

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

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

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

//| Signal End |

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

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

Kann mir jemand weiterhelfen?

 

Ich habe auch diesen Code gefunden,

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

for(i=0;i<OrdersTotal();i++)

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

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

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

for(i=0;i<n;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

Kann mir ein Experte sagen, welcher besser geschrieben ist?

 

Deckungsbeitrag für alle Bestellungen eines Paares (Magie)

Hallo zusammen,

ich möchte alle Orders (Kauf&Verkauf) eines Paares per Magic sammeln und wenn sie einen Breakeven erreichen, sollen alle Orders geschlossen werden.

Jeder Hinweis ist sehr willkommen, danke

extern bool PairBreakeven=true;// Breakeven pro Paar alle Orders desselben Paares/Magic

extern double Pairbreakevengain=6;// Gewinn in Pips, der erforderlich ist, um den Break-Even zu erreichen

extern double Pairbreakeven=3;// Break Even, Order geschlossen, 3 Pip Gewinn/Verlust

double Pairmovebreakeven;

if(PairBreakeven==true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic);

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

RefreshRates();

if(OrdersTotal()>0){

for(int i=OrdersTotal();i>=0;i++){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

zurück;

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell ist ähnlich

int total=BestellungenGesamt();

for(int cnt=Gesamt-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

return(0);

}

 

ArraySort mit 3 oder mehr Dimensionen.

Kann jeder Experte in diesem helfen?

Ich habe versucht, mit Arraysort erfolgreich für 1 oder 2 Dimension Array. Aber stecken geblieben mit der 3 Dimension. Soweit ich weiß, verwendet arraysort nur die erste Spalte für die Sortierung. Kann jemand beraten, wie man diese Arraysortierung mit 3 oder mehr Dimensionen lösen?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

}
Grund der Beschwerde: