Wie programmiert man? - Seite 18

 

Michel,

Vielen Dank, dass Sie sich die Zeit genommen haben, sich den Code anzusehen und zu antworten. Manchmal braucht es nur ein weiteres Paar Augen! Sie hatten Recht, dass der Fehler in der Division durch 0 mit einem fehlenden Balken lag. Jetzt ist alles in Ordnung.

BW

 

Code-Erklärung - Ind-Fractals-1

kann jemand erklären, wie die Fraktale in diesem(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4) Indikator bestimmt werden. ich habe bemerkt, dass wie normale Fraktale sie gibt es eine Verzögerung zwischen dem Wendepunkt und die tatsächliche Fraktal gezeichnet wird, aber ich würde gerne wissen, wie lange diese Verzögerung ist. ich denke, ein 15min Fraktal ist 40-50 1min Bars gezeichnet, nachdem der Punkt festgelegt ist. ich habe auch bemerkt, dass die Farbe der Fraktale ändern (obwohl ihre Position nicht), wie einige 15min Fraktale 1hr Fraktale werden.

 

Wie kodiere ich das Folgende?

Hallo zusammen,

Ich bin ein Neuling auf metatrader 4. Ich weiß nicht viel über die Codierung in mt4.

Ich möchte, dass Metatrader einen Alarm ausgibt, wenn

1. 30 Periode einfache gleitende Durchschnitt steigt über 60 Periode einfache gleitende Durchschnitt.

2. 30 Periode einfacher gleitender Durchschnitt fällt unter 60 Periode einfacher gleitender Durchschnitt.

Kann mir jemand helfen, den Code hier zu posten?

Vielen Dank!

 
adamk203:
Hallo zusammen,

Ich bin ein Neuling auf metatrader 4. Ich weiß nicht viel über die Codierung in mt4.

ich möchte, dass metatrader eine Warnung ausgibt, wenn

1. 30 Periode einfacher gleitender Durchschnitt über 60 Periode einfacher gleitender Durchschnitt steigt.

2. 30 Periode einfacher gleitender Durchschnitt fällt unter 60 Periode einfacher gleitender Durchschnitt.

Kann mir jemand helfen, den Code hier zu posten?

vielen Dank

Warum nicht diesen Code verwenden? Geben Sie Ihren MA ein und wählen Sie 0 für den einfachen Durchschnitt.

Dateien:
 

Vielen Dank~~

 
increase:
Warum nicht diese verwenden? setzen Sie in Ihrem MA und wählen Sie 0 für einfache, gibt Ihnen Linien und Pfeile

Hallo, ich möchte das Signal kommen, wenn die 2 saubere Kerze nach der cross over.thx im Voraus beendet worden ist

Dateien:
gbp_4h.gif  19 kb
 

Bitte helfen Sie, meinen Code zu korrigieren

Zunächst einmal, ich glaube, dieser Code ist sehr praktisch, viele ppl wird es lieben. Also bitte helfen Sie mir, ihn zu verbessern.

In der Tat, dieser Code funktioniert bereits großartig. Aber ich bin einfach müde von der einfachen Alert-Popup, mit NO Symbol angezeigt. Also habe ich einige Zeilen geändert/hinzugefügt, um zu versuchen, was der %%%%%%%%% Teil ist.

Ich weiß nicht, warum, drucken, kommentieren... was auch immer, nichts passiert.

Und seltsamerweise kann man im Teil "----alert----" sehen, dass ich UPBREAK alert in etwas anderes geändert habe, aber es wird immer noch "UP BREAK" angezeigt. ---- Ich bin mir sicher, dass ich jedes Mal, wenn ich den Code umschreibe, ihn kompiliere, aus dem Diagramm lösche und ihn dann wieder lade.

Irgendeine Idee?

#property indicator_chart_window

#import "usr32.dll" // %%%%%%%%%%

int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%

#import //%%%%%%%%%%

int PrevAlertTime = 0;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

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

int start()

{

int i=ObjectsTotal();

int redtotal=0,j,typ1;

double price1,price2,up,down;

color col;

string name1,name2,nameup,namedown,warn1,sym=Symbol();

warn1=sym + "Break Up"; //%%%%%%%%%%

Print(sym); //%%%%%%%%%%%

//----make sure exactly 2 red lines on chart---------------------

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

if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)

{ redtotal++;

if (redtotal==1) name1=ObjectName(j);

if (redtotal==2) name2=ObjectName(j);

}

if (redtotal==2)

{

if(ObjectFind("remind")==0) ObjectDelete("remind");

}

else

{

ObjectCreate("remind",OBJ_LABEL,0,0,0);

ObjectSet("remind", OBJPROP_XDISTANCE,0);

ObjectSet("remind", OBJPROP_YDISTANCE,20);

ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);

return(0); // question here: what should I use, 0 or -1 ?

}

//--------decide which line is up / down ---------------------

price1=NormalizeDouble(ObjectGetValueByShift(name1,1),

MarketInfo(Symbol(),MODE_DIGITS));

price2=NormalizeDouble(ObjectGetValueByShift(name2,1),

MarketInfo(Symbol(),MODE_DIGITS));

if (price2>=price1)

{

nameup=name2; namedown=name1;

up=price2; down=price1;

}

else

{ nameup=name1; namedown=name2;

up=price1; down=price2;

}

//-------- alert ----------------------------------------------

if (TimeCurrent() - PrevAlertTime > Period()*60/3)

{

if (Close[1]up)

{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%

Print(Symbol()); // %%%%%%%%%%

PrevAlertTime = TimeCurrent();

}

if (Close[1]>=down && Close[0]<down)

{ Alert("DOWN BREAK",Symbol());

PrevAlertTime = TimeCurrent();

}

}

return(0);

}

 

Ich habe gefunden, was falsch ist:

Normalerweise erstelle oder bearbeite ich einen Code mit: "Metaeditor---datei---neu/öffnen..."

Aber ich habe gerade herausgefunden: nachdem ich den Code an das Diagramm angehängt habe, und dann einige Änderungen in diesem Code vorgenommen habe, wirken sich weitere Änderungen nicht mehr auf das Diagramm aus (sicherlich habe ich sie kompiliert!)----- aber "Metaeditor---Navigator---Dateien---mein Code..." schon! Das ist seltsam, es sollte derselbe Code sein!

 

Hilfe bei Trail-Code

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY) {

//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {

// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);

// break;

//}

if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

} else if (OrderType() == OP_SELL) {

if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||

(OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

} // proc TrailIt()

Das ist der Code. Wie in der Anlage zu sehen ist, wird bei einem Auftrag die Haltestelle geändert, aber auch in die falsche Richtung, und ich kann es nicht beheben. Ich wäre Ihnen wirklich dankbar, wenn Sie mir bei der Suche nach der Lösung helfen könnten!!!

Dateien:
ordermodify.txt  40 kb
 

Versuchen Sie dies. Es sieht so aus, als ob Sie möglicherweise versuchen, Aufträge mit verschiedenen Symbolen zu ändern. Wenn dies der Fall ist, beziehen Bid und Ask die Marktdaten nur von dem Symbol des Chart-Fensters, an das der EA angehängt ist. Mit MarketData(Symbol, MODE_BID) können Sie die entsprechenden Daten abrufen.

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

double bid=MarketInfo(OrderSymbol(),MODE_BID);

double ask=MarketInfo(OrderSymbol(),MODE_ASK);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY)

{

if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

else if (OrderType() == OP_SELL)

{

if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

return;

}
Grund der Beschwerde: