int digits = (int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // number of decimal placesdouble point = SymbolInfoDouble(_Symbol,SYMBOL_POINT); // pointdouble ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // current price for closing SHORTdouble SL = ask-_SL*point; // unnormalized SL value
SL = NormalizeDouble(SL,digits); // normalizing Stop Lossdouble TP = ask+_TP*point; // unnormalized TP value
TP = NormalizeDouble(TP,digits); // normalizing Take Profitdouble open_price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(!trade.Buy(Volume,_Symbol,open_price,SL,TP,""))
{
//--- failure messagePrint("Sell() method failed. Return code=",trade.ResultRetcode(),
". Code description: ",trade.ResultRetcodeDescription());
return (false);
}
else
{
Print("Sell() method executed successfully. Return code=",trade.ResultRetcode(),
" (",trade.ResultRetcodeDescription(),")");
}
Bitte sagen Sie mir, warum ich im Strategietester keinen Stop-Loss und keinen Gewinn setze und nur eine Position zum Marktpreis eröffne?
Ich verwende CTrade (trade.Buy), um eine Position zu eröffnen.
Ich habe versucht, es mit (trade.PositionOpen) zu öffnen, die gleiche Sache, es öffnet und setzt Stops auf Demo, Stops sind 0 in der Strategy Tester, ich weiß nicht, was das Problem sein kann.
Hallo, liebe Programmierer. Ich denke, Programmierer sind wie Götter - etwas aus dem Nichts zu erschaffen, aus dem Nichts, und materielle Dinge zu erschaffen, ist einfach fantastisch... Ich habe einen Artikel über Zeit gelesen, aber da steht nichts darüber, wie man eine Periodizität festlegt, nicht einmal eine Periodizität, sondern das Aktivieren und Deaktivieren eines Expert Advisors zu bestimmten Zeiten. Ich weiß nicht, ob jemand diese Frage schon einmal gestellt hat. Ich muss meinen EA so umbenennen, dass er zu unterschiedlichen Zeiten startet und stoppt, aber da MT5 nur ein Paar - einen EA - hat, muss ich manuell zwischen ihnen wechseln. Danke
Основное правило трейдера - дай прибыли расти, обрезай убытки! В статье рассматривается один из основных технических приемов, позволяющий следовать этому правилу - перемещение уровня защитной остановки (уровня Stoploss) вслед за растущей прибылью позиции, другими словами - скользящий стоп или трейлинг стоп (trailingstop). Приводится пошаговая процедура создания класса для трейлинг стопа на индикаторах SAR и NRTR, который каждый желающий сможет за 5 минут встроить в своего эксперта или использовать независимо для управления позициями на своем счете.
Ich habe Trailing-Balken eingestellt, aber sie schalten sich nicht zum richtigen Zeitpunkt ein und aus, und sie berücksichtigen die Umkehrung nicht. Die Idee ist wie folgt: nach dem Trailing-Stop, in der Regel am Ende einer Periode, zum Beispiel eine Stunde oder 15 Minuten, warten Sie ein paar Minuten und lassen Sie es wieder einschalten und bestimmen Sie das Layout durch den Indikator und gehen Sie weiter zum nächsten Stop...:-))))
Pavel777: Hallo, können Sie mir sagen, ob es einen Unterschied für einen EA gibt: eine Mindesteinzahlung von 1000& (Dollarkonto) oder 1000 Rubel (Rubelkonto)?
Es hängt alles vom Expert Advisor ab und nicht nur davon. Ich denke, das Wichtigste ist die Losgröße des EA.
Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch
Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.
PositionModify(Symbol,SL,ТР)
Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.
Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!
datetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад//--- запросим в кэш программы нужный интервал торговой историиHistorySelect(start,end);
//--- получим количество сделок в историиint deals=HistoryDealsTotal();
//--- получим тикет сделки, имеющей последний индекс в спискеulong deal_ticket=HistoryDealGetTicket(deals-1);
if(deal_ticket>0) // получили в кэш сделку, работаем с ней
{
//--- тикет ордера, на основании которого была проведена сделкаulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
long order_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
double priceh =HistoryDealGetInteger(deal_ticket,DEAL_PRICE); // не могу определить цену открытия
PrintFormat("Сделка #%d по ордеру #%d с ORDER_MAGIC=%d участвовала в позиции %d",
deals-1,order,order_magic,pos_ID);
}
else// неудачная попытка получения сделки
{
PrintFormat("Всего в истории %d сделок, не удалось выбрать сделку"+
" с индексом %d. Ошибка %d",deals,deals-1,GetLastError());
}
//--- получим общее количество позицийint positions=PositionsTotal();
//--- пробежим по списку ордеровfor(int i=0;i<positions;i++)
{
ResetLastError();
//--- скопируем в кэш позицию по ее номеру в спискеstring symbol=PositionGetSymbol(i); // попутно получим имя символа, по которому открыта позицияif(symbol!="") // позицию скопировали в кэш, работаем с ней
{
long pos_id =PositionGetInteger(POSITION_IDENTIFIER);
double price =PositionGetDouble(POSITION_PRICE_OPEN);
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
long pos_magic =PositionGetInteger(POSITION_MAGIC);
string comment =PositionGetString(POSITION_COMMENT);
if(pos_magic==EA_Magic)
{
PositionModify(Symbol(),NormalizeDouble(( - StopLoss*_Point),4),
NormalizeDouble(( + TakeProfit*_Point),4)); // ну здесь еще через запрос в зависимости от типа ордера
}
PrintFormat("Позиция #%d по %s: POSITION_MAGIC=%d, цена=%G, тип=%s, комментарий=%s",
pos_id,symbol,pos_magic,price,EnumToString(type),comment);
}
else// вызов PositionGetSymbol() завершился неудачно
{
PrintFormat("Ошибка при получении в кэш позиции c индексом %d."+
" Код ошибки: %d", i, GetLastError());
}
}
Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch
Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.
Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.
Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!
Sie sollten zunächst einen manuellen Mittelungsalgorithmus erstellen. Jetzt haben Sie einen negativen Wert für den Stop-Loss, und Sie sollten den tatsächlichen Stop-Loss-Kurs haben. Sie sollten diese Parameter entsprechend Ihrem Mittelungsalgorithmus einstellen.
Die Variable war früher vom Typ extern, jetzt ist sie input, aber sie ist bereits eine Konstante, extern wird jetzt nicht im Indikatormenü angezeigt. Ist es möglich, so zu verfahren wie bisher, oder müssen zusätzliche Variablen erstellt werden, um diese Werte ändern zu können?
Wir haben zum Beispiel einen EA mit dem OnTick-Ereignis, der je nach den Bedingungen eine Position öffnet oder schließt. Sie können den EA im Strategietester testen, wo Sie den Zeitrahmen einstellen können. Ich sehe nicht, wie sie miteinander verknüpft sind. Wird der EA nicht im Strategietester getestet und reagiert er auf jeden Tick? Oder reagiert er nur auf den ausgewählten Zeitrahmen im Strategietester? Ich hoffe, diese Frage ist klar
Bitte sagen Sie mir, warum ich im Strategietester keinen Stop-Loss und keinen Gewinn setze und nur eine Position zum Marktpreis eröffne?
Ich verwende CTrade (trade.Buy), um eine Position zu eröffnen.
Ich habe versucht, es mit (trade.PositionOpen) zu öffnen, die gleiche Sache, es öffnet und setzt Stops auf Demo, Stops sind 0 in der Strategy Tester, ich weiß nicht, was das Problem sein kann.
Ich weiß, dass ich es manuell machen kann, aber ich brauche einen Roboter, der das macht.
Wie erstelle ich eine Funktion zur Änderung eines Auftrags?
https://www.mql5.com/ru/articles/134
Hallo, können Sie mir sagen, ob es einen Unterschied für einen EA gibt: eine Mindesteinzahlung von 1000& (Dollarkonto) oder 1000 Rubel (Rubelkonto)?
Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch
Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.
Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.
Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!
Sehr geehrte Damen und Herren, helfen Sie mir!!! Sie werden schon beim letzten Schritt entmutigt, von einer vorgefertigten Strategie. Kann keinen durchschnittlichen Handel, durch
Ich versuche, einen Durchschnittswert zu ermitteln. Aber in den Parametern.
Ich kann den Eröffnungskurs nicht ermitteln, weil ich den Eröffnungskurs erhalte und den Kurs haben möchte, der durch die Mittelwertbildung verschoben wurde.
Oder einfach über die Bestellhistorie den Preis der ersten und zweiten Bestellung herausfinden und schon auf Basis dieser Daten gemittelt werden, diesen Weg will ich nicht, das ist mir zu kompliziert!
Hallo, bitte klären Sie eine Sache.
Wir haben zum Beispiel einen EA mit dem OnTick-Ereignis, der je nach den Bedingungen eine Position öffnet oder schließt. Sie können den EA im Strategietester testen, wo Sie den Zeitrahmen einstellen können. Ich sehe nicht, wie sie miteinander verknüpft sind. Wird der EA nicht im Strategietester getestet und reagiert er auf jeden Tick? Oder reagiert er nur auf den ausgewählten Zeitrahmen im Strategietester? Ich hoffe, diese Frage ist klar