Wie programmiert man? - Seite 186

 

Okay, zu der ursprünglichen Frage:

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

for(int i=(0); i<=(limit-1); i++)

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

Ich schätze, ich möchte den letzten Teil des Codes ersetzen, der es mir ermöglicht, die Variable, die verfolgt wird, im Incicator-Objekt zu aktualisieren, so dass ich sie später als Ausstiegslinie verwenden kann. Der restliche Code ist jedoch irrelevant. Wenn ich die obige Funktion ausführe, erwarte ich, dass Antaria die Position von 1,39 oder was auch immer sie anfängt, auf 1,2 verschiebt. Ich kann mich nicht erinnern, ob ich die 200-Variable verwende. Ich glaube, ich habe meine Kopf- und Fußzeilen-Kommentare herausgeschnitten, aber der gesamte Slave-Indikator ist dort oben, die AntariaRising in sofortigen obigen Code gemeint ist

Dies war die einzige Funktion, die ich finden konnte, die mit Indikatorobjekten spricht, und ich verwende sie, um Werte in anderen Bereichen abzulesen.

 

Zu Ihrem Indikatorcode. Er ist falsch.

Var. Grenze immer gleich Null.

Nehmen Sie die Zeichenkette weg:

int limit;

aus dem start().

 

Helfen Sie mir mit diesem Code pls

Ich möchte, dass mir jemand mit diesem Code hilft, er öffnet den Handel, wenn ich es will, aber schließt ihn automatisch, so dass ich möchte, dass er mit Stop-Loss handelt und nicht schließt, wenn er nicht wieder überquert wird.

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

//| JR300.mq4 |

| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#Eigentum Copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- Eingabeparameter

extern double TakeProfit=250.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

int Gekreuzt (double line1 , double line2)

{

static int letzte_Richtung = 0;

static int aktuelle_Richtung = 0;

if(line1>line2)current_direction = 1; //oben

if(line1<line2)current_direction = 2; //abwärts

if(aktuelle_Richtung != letzte_Richtung) //geändert

{

letzte_Richtung = aktuelle_Richtung;

return (letzte_Richtung);

}

sonst

{

return (0);

}

}

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

//| Expertenstartfunktion |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("Balken weniger als 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit kleiner als 10");

return(0); // TakeProfit prüfen

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PREIS_SCHLIESSEN,0);

int isCrossed = Gekreuzt (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,

"Mein EA",12345,0,Grün);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

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

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,

Bid-TakeProfit*Point, "Mein EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

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

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<gesamtzahl;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // Long-Position wird eröffnet

{

// sollte sie geschlossen werden?

if(isCrossed == 2)

{

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

// Position schließen

return(0); // beenden

}

// Prüfung auf Trailing-Stop

if(NachlaufenderStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // auf Short-Position gehen

{

// soll sie geschlossen werden?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

// Position schließen

return(0); // beenden

}

// Prüfung auf Trailing-Stop

if(NachlaufenderStop>0)

{

if((OrderOpenPrice()-Ask)>(Punkt*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

 

Versuchen Sie dies:

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

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

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

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

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

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

Danke

Roger09:
Versuchen Sie dies:
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

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

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

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

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

danke roger09 Gott segne Sie

 

Danke Roger, ich habe die zweite Grenzwertdeklaration aus meiner Startfunktion entfernt. Ich bin überrascht, dass der Compiler diese Deklaration zulässt, aber sie hat sich nicht merklich auf mein Programm ausgewirkt.

Dennoch weiß ich nicht, wie ich die laufende Instanz dieses Indikators in meinem EA ändern kann. Eine Methode wäre sehr willkommen, oder zumindest eine Bestätigung, dass die API es derzeit nicht erlaubt, Informationen an laufende Indikatoren zu übergeben.

Vielen Dank!

 
yingli:
Ich bin dabei, den Code für den Indikator zu lernen, aber es hat nicht funktioniert. Es ist ein sehr zuverlässiger Indikator, und wenn jemand einen EA für ihn machen könnte, wäre das fast ein heiliger Gral.tia.

Das Grundprinzip ist:

1. Öffnen Sie eine Verkaufsposition, wenn der rote Pfeil erscheint,

2. Öffnen Sie eine Kaufposition, wenn ein weißer Pfeil erscheint und schließen Sie automatisch alle Verkaufspositionen.

3.gilt für jeden Zeitrahmen.

4.kein Stop-Loss,

5.add order Funktion.

Ich freue mich auf eine Antwort!

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

//| IINWMARROWS.mq4 |

//| Basierend auf EMA_CROSS.mq4 |

//| Urheberrecht ?2006, MetaQuotes Software Corp. |

//| Devisenhandels-Software: Forex Handelsplattform MetaTrader 4 ||

//| Zuletzt geringfügig geändert von Iin Zulkarnain

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

#Eigenschaft Copyright "Copyright ?2006, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//----

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Weiß

#eigenschaft indicator_color2 Rot

#Eigenschaft indicator_width1 2

#eigenschaft indicator_width2 2

//----

double CrossUp[];

double CrossDown[];

extern int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int FasterMA= 3;

extern int LangsamerModus=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int SlowerMA= 3;

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

//| Benutzerdefinierte Indikator-Initialisierungsfunktion |

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

int init()

{

//---- Indikatoren

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexPfeil(0, 233);

SetIndexPuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

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

//| Benutzerdefinierte Funktion zur Deinitialisierung des Indikators |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Benutzerdefinierte Indikator-Iterationsfunktion |

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

int start()

{

int limit, i, zähler;

double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;

double Range, AvgRange;

int counted_bars=IndicatorCounted();

//---- Prüfung auf mögliche Fehler

if(gezählte_Balken<0) return(-1);

//---- zuletzt gezählte Balken werden neu gezählt

if(gezählte_Balken>0) gezählte_Balken--;

//----

limit=Balken-gezählt_Balken;

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

{

counter=i;

Range=0;

AvgRange=0;

for(counter=i ;counter<=i+9;counter++)

{

AvgRange=AvgRange+MathAbs(High[Zähler]-Low[Zähler]);

}

Range=AvgRange/10;

fasterMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);

langsamerMAvorher=iMA(NULL, 0, LangsamerMA, 0, LangsamerModus, PREIS_ÖFFNEN, i+1);

langsamerMAnach=iMA(NULL, 0, LangsamerMA, 0, LangsamerModus, PREIS_ÖFFNEN, i-1);

if ((fasterMAnow > slowerMAnow) && (fasterMAprevious slowerMAafter))

{

CrossUp=Low - Range*0.5;

}

else if ((schnellerMAjetzt langsamerMAvorher) && (schnellerMAjetzt < langsamerMAjetzt))

{

CrossDown=High + Range*0.5;

}

}

return(0);

}

//+------------------------------------------------------------------+dieser Thread, um zu lernen, wie man richtig programmiert, ich lerne programmieren für

Könnte jemand helfen, einen Alarm für diesen Indikator zu programmieren, der wirklich cool ist.

 

George's Oscar Calculator - Kann jemand einen Indikator dafür programmieren?

Hallo Leute,

Ich weiß nicht, ob jemand mit Forex Made-EZ von George Smith vertraut ist.

Ich bin gerade dabei, seine Arbeit zu überprüfen und frage mich, ob jemand einen Indikator für den von ihm verwendeten Oscar-Oszillator kodiert hat?

Die Formel lautet

A = das höchste Hoch der letzten acht Balken (einschließlich dieses Balkens)

let B = der tiefste Stand der letzten acht Balken (einschließlich dieses Balkens)

C = Schlusskurs des aktuellen Balkens

X = der vorherige Oszillatorwert (Oscar)

Der "grobe" Oszillator von heute ist gleich (C-B) geteilt durch (A-B) mal 100.

Als nächstes "glätten" wir unsere grobe Zahl (nennen wir sie Y) wie folgt:

Endgültige Oszillatorzahl = ((X geteilt durch 3) mal 2), plus (Y geteilt durch 3).

Wenn jemand dies entweder kodiert hat oder kodieren kann, wäre ich Ihnen sehr dankbar.

Mit freundlichen Grüßen Steve

 

Umgekehrter Trailing Stop

Hallo!

Ich brauche etwas Hilfe bei einer Idee.

Ich benutze Trailing Stops in meinen EAs (3 Step Trailing), aber ich möchte das invertierte Ding machen, um Verluste zu schützen.

Ich werde versuchen, zu erklären:

Ich eröffne einen Auftrag mit einem anfänglichen Stop-Loss.

Wenn der Handel 15 Pips in Richtung Verlust geht und 10 Pips zurückkommt, schließe ich den Handel (erster Schritt).

Wenn der Handel 30 Pips in die Verlustrichtung geht und 15 Pips zurückkommt, schließe ich den Handel (zweiter Schritt).

Etwa so.

Vielen Dank für die Hilfe

 
dedreko:
Hallo,

Ich möchte etwas Hilfe mit einer Idee.

Ich benutze Trailing-Stops auf meine EAs (3 Schritt Trailing), aber ich möchte die umgekehrte Sache zu tun, um Verluste zu schützen.

Ich werde versuchen, zu erklären:

Ich eröffne einen Auftrag mit einem anfänglichen Stop-Loss.

Wenn der Handel 15 Pips in Richtung Verlust geht und 10 Pips zurückkommt, schließe ich den Handel (erster Schritt).

Wenn der Handel 30 Pips in die Verlustrichtung geht und 15 Pips zurückkommt, schließe ich den Handel (zweiter Schritt).

Etwa so.

Danke für die Hilfe

Das ist etwas Neues für mich.

Also, der Verlust Handel Schließung immer warten müssen, bis es zurück prallen richtig?

Wie sieht es aus, wenn er nicht zurückkommt?

Schließen wir dann mit dem anfänglichen SL?

Grund der Beschwerde: