Bitte helfen Sie mir bei folgendem Problem: Ich kann den Indikator nicht dazu bringen, beim Erscheinen eines neuen Balkens (D-Intervall) neu zu zeichnen. П
Genauer gesagt, wenn ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Natürlich kann der Auftrag sowohl Kauf als auch Verkauf sein, aber ich würde ||
LOL!!! Ja, das habe ich... In Wirklichkeit...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Ich empfehle zu klären, wer der Punkt ist und warum er mit 0.5 multipliziert wird. Es ist nur so, dass die Variante ohne Normalisierungsdoublette nicht so zuverlässig ist, wenn man sie mit Null vergleicht. Hier funktioniert es.
Ticket ist ein Integer-Typ, OrderClose ist boolesch... Es ist besser, es nicht auf diese Weise zu machen.
while loop ist unendlich und nur Marktaufträge werden gelöscht, wenn einer anhängig ist, wird diese Musik ewig sein. Danke!!! !!!!
Ja, ich weiß nicht... Nun, continue;sollte an die vorherige Schleife senden, und es kann wahrscheinlich durchlaufen, bis es passt, je nachdem, wie es geschrieben ist.
Hilfe !!!!!!! (mein Beitrag auf der vorherigen Seite)!
//+------------------------------------------------------------------+//| AsctrendBuySellExpert_v1.mq4 code by Newdigital |//| https://www.forex-tsd.com |//| using Gordago software http://www.gordago.com |//| - Asctrend code for this EA was taken from |//| AscTrend_NonLag EA coded by of Igorad. |//| - "Non-Trading Hours" on the screen fixing code by Locutus |//| from Updated DayTradingMM EA |//+------------------------------------------------------------------+#property copyright "newdigital"#property link "https://www.forex-tsd.com"#include <stderror.mqh> // библиотека ошибок#include <stdlib.mqh>externint MAGIC = 100111;
externstring PARAMETERS_EXPERT = "PARAMETERS EXPERT";
externcolor clOpenBuy = Blue;
externcolor clCloseBuy = Aqua;
externcolor clOpenSell = Red;
externcolor clCloseSell = Violet;
externcolor clModiBuy = Blue;
externcolor clModiSell = Red;
externstring Name_Expert = "AsctrendBuySellExpert";
externbool UseSound = False;
externstring NameFileSound = "alert.wav";
externstring PARAMETERS_FILTER = "PARAMETERS FILTER";
externbool UseHourTrade = False;
externint FromHourTrade = 8;
externint ToHourTrade = 18;
externstring PARAMETERS_TRADE = "PARAMETERS TRADE";
externdouble Lots = 0.10;
externint Slippage = 4;
externdouble lStopLoss = 1000;
externdouble sStopLoss = 1000;
externdouble lTakeProfit = 1000;
externdouble sTakeProfit = 1000;
externdouble lTrailingStop = 1000;
externdouble sTrailingStop = 1000;
externstring PARAMETERS_INDICATOR_ONE = "ASCTrend";
externbool UseASCtrend = True;
externint RISK = 3;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
if (UseHourTrade){
if((Hour()>=FromHourTrade)&&(Hour()<=ToHourTrade))
Comment("Trading Hours");
else
{
Comment("Non-trading Hours");
return(0);
}
}
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy = ASCtrend>0 && ASCtrend1<0;
bool ASCtrendSell = ASCtrend<0 && ASCtrend1>0;
}
else {ASCtrendBuy = true; ASCtrendSell = true;}
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((ASCtrendBuy)){
OpenBuy();
return(0);
}
if ((ASCtrendSell)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((ASCtrendSell)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((ASCtrendBuy)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
ASCtrend1=ASCtrend;
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
BroCoOrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }
int ASCTrend( int risk )
{
double smin, smax, bsmin, bsmax;
int len = 3 + 2*risk;
smin=Low[Lowest(NULL,0,MODE_LOW,len,1)];
smax=High[Highest(NULL,0,MODE_HIGH,len,1)];
bsmax = smax-(smax - smin)*(33.0-risk)/100.0;
bsmin = smin+(smax - smin)*(33.0-risk)/100.0;
asctrend = asctrend1;
if(Close[1]>bsmax) asctrend= 1;
if(Close[1]<bsmin) asctrend=-1;
asctrend1 = asctrend;
return(asctrend);
}
//+------------------------------------------------------------------+//| Функция для работы с дилинговым центром BroCo |//+------------------------------------------------------------------+int BroCoOrderSend(string symbol,
int cmd,
double volume,
double price,
int slippage,
double stoploss,
double takeprofit,
string comment,
int magic,
datetime expiration,
color arrow_color)
{
int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);
int check = -1;
if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
check = GetLastError();
if (check != ERR_NO_ERROR) {
Print("OrderModify error: ", ErrorDescription(check));
}
}
} else {
check = GetLastError();
if (check != ERR_NO_ERROR){
Print("OrderSend error: ",ErrorDescription(check));
}
}
return (ticket);
}
//----------------------------------------------------------------
Hallo zusammen! Ich bin auf einen alten Experten gestoßen, der mit dem asctrend-Indikator arbeitet. Ich würde gerne überprüfen, wie sich dieser Indikator in Echtzeit verhält, aber ich kann den Punkten nicht immer folgen und mein Handel ist nicht voll. Ich überprüfte den Tester, gibt es ein Signal an jedem Punkt, aber setzen Sie es auf eine Demo und bemerkte die Sache, dass die Demo Signale überspringt, während das Protokoll nichts an den Experten schreiben, Graben in den Code und nicht verstehen, was das Problem :( vielleicht jemand stoßen eine Nase in, was das Problem sein kann?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
// Здесь код для закрытия всех открытых позиций (тоже в цикле)for ( int y=OrdersTotal()-1; y>=0; y--) {Alert ("Здесь код для закрытия всех открытых позиций (тоже в цикле)",y);
OrderSelect(y, SELECT_BY_POS );
if ( OrderType( )==OP_BUY || OrderType( )==OP_SELL ){
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse-2", GetLastError( ) ); C=0;A=1; }}
// Здесь код для удаления всех отложенных ордеров (также в цикле)for ( int f=OrdersTotal()-1; f>=0; f--) {Alert("Здесь код для удаления всех отложенных ордеров (также в цикле)",f);
OrderSelect(f, SELECT_BY_POS );
if ( OrderType( )==OP_BUYSTOP || OrderType( )==OP_SELLSTOP ){
OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse-2", GetLastError( ) ); }} // CloseAll();
}
}
Ich habe bis jetzt geschrieben, und nur die erste Warnmeldung wird protokolliert
MetaEditor funktioniert nach der Neuinstallation des Terminals nicht mehr. Es funktioniert nur, wenn Sie nichts am Code des Indikators ändern. Wenn Sie etwas ändern, sogar die Farbe der Linie, wird ein Fehler erzeugt:
Das Betriebssystem ist Windows 7. Wer weiß, vielleicht ist jemandem eine solche Panne unterlaufen. Können Sie mir sagen, was ich tun soll?
Langer Code Jungs! Ich möchte noch einmal darauf hinweisen, dass der Code eines anderen zunächst einmal ein Kryptogramm ist, das erst noch entschlüsselt werden muss! Und das ist eine Menge Arbeit! Glauben Sie, ein Programmierer möchte sich durch kilometerlange Listen wühlen? Lassen Sie mich einem von Ihnen meinen Code für nur dreitausend Zeilen geben und darum bitten, ein kleines Missverständnis dieses Codes zu beseitigen. Glaubst du, du willst einfach nur in meine Gedankenwelt eindringen? Ich bezweifle es wieder. Deshalb habe ich eine Bitte an Sie: Wenn Sie eine Schlüsselfrage stellen, beschreiben Sie das Problem so kurz wie möglich und machen Sie gleichzeitig eine ausreichende Beschreibung, um das Wesentliche zu verstehen. Sonst ist dein Schrei ein Schrei ins Leere. Der Code kann an den Beitrag angehängt werden. Das alles ist notwendig und ausreichend.
Grüße an alle!
Bitte helfen Sie mir bei folgendem Problem: Ich kann den Indikator nicht dazu bringen, beim Erscheinen eines neuen Balkens (D-Intervall) neu zu zeichnen. П
Ich muss ihn manuell neu starten.
Ist es möglich, den Zolliot-Wellenindikator herunterzuladen?
Natürlich können Sie das. Sie müssen Folgendes finden und herunterladen
zlliot wave indicator site:mql4.com
Danke, splxgf !!!!!!!!!!!!!!!
Genauer gesagt, wenn ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )
Natürlich kann der Auftrag sowohl Kauf als auch Verkauf sein, aber ich würde ||
LOL!!! Ja, das habe ich... In Wirklichkeit...
if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)
Ich empfehle zu klären, wer der Punkt ist und warum er mit 0.5 multipliziert wird. Es ist nur so, dass die Variante ohne Normalisierungsdoublette nicht so zuverlässig ist, wenn man sie mit Null vergleicht. Hier funktioniert es.
Ticket ist ein Integer-Typ, OrderClose ist boolesch... Es ist besser, es nicht auf diese Weise zu machen.
while loop ist unendlich und nur Marktaufträge werden gelöscht, wenn einer anhängig ist, wird diese Musik ewig sein. Danke!!! !!!!
Leute, erklärt mir den Unterschied ?????
if(OrderSymbol()!=Symbol())continue;
и
if(AuftragSymbol()==Symbol())
???????????
Ja, ich weiß nicht... Nun, continue;sollte an die vorherige Schleife senden, und es kann wahrscheinlich durchlaufen, bis es passt, je nachdem, wie es geschrieben ist.
Hilfe !!!!!!! (mein Beitrag auf der vorherigen Seite)!
MetaEditor funktioniert nach der Neuinstallation des Terminals nicht mehr. Es funktioniert nur, wenn Sie nichts am Code des Indikators ändern. Wenn Sie etwas ändern, sogar die Farbe der Linie, wird ein Fehler erzeugt:
Das Betriebssystem ist Windows 7. Wer weiß, vielleicht ist jemandem eine solche Panne unterlaufen. Können Sie mir sagen, was ich tun soll?