Um es einfacher zu machen, nehmen Sie meinen Quellcode, es hat eine Logik, die funktioniert, außer dem Problem, das ich beschrieben habe, ich verstehe es nicht ganz, mein Kopf kocht, aber ich kann keinen Nutzen daraus ziehen.
Erteilen Sie einen schwebenden Auftrag oder zwei in verschiedene Richtungen?
SGarnov: Ich habe das Gefühl, dass der Roboter immer stärker wird, ich mag es nicht, wenn ich Aufträge erteile oder nicht handeln möchte, da ich sie bereits erteilt habe, ich kann sie nicht öffnen, da ich sie bereits erteilt habe, er muss nur den Auftrag öffnen.
@MakarFX bereits tut. Wir sollten uns nicht in die Quere kommen.
Was ich sagen wollte... Schreiben Sie alles so, dass es für Sie (persönlich/persönlich) klar ist, ziehen Sie keinen Code mit Copy-Paste.
und ein stark vereinfachtes Roboterskelett sieht etwa so aus:
int ticket=-1; // тикет открытого ордераbool inited=false; // признак завершения инициализацииintOnInit()
{
ticket=-1;
inited=false;
// ещё надо проверить параметры, но пока чёрт с ними// пробуем загрузить прежнее состояниеif (LoadState()) {
// из файла, базы или глоб.переменных загрузилисьif (!CheckState()) {
// проверили, плохо всё..
ClearState(); // удалить и поругатьсяAlert("Усё пропало, шеф !");
returnINIT_FAILED();
}
}
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason)
{
if (inited) {
// инициализация была проведена, стейт мог уже менятся во время работы
SaveState(); // сохраняем куда-то там
}
}
voidOnTick()
{
//// ЧТОБЫ БЫ БЫЛО ХОРОШО, //// НЕ БОЛЕЕ 1-го ПРИКАЗА Open/Close/Modify на тик//// И ЗАВЕРШИТЬ ВСЁ ПО БЫСТРОМУif (!inited) {
// связь есть, тики идут// довести инициализацию до нужной кондицииif (!DoInit()) {
// не довеласьAlert("вот же блин...");
ExpertRemove();
} else {
// в DoInit проставлен корректный ticket
inited=true;
}
return;
}
// всё проиничено, ticket или -1 если нет нифига или реально тикет//// РАЗБОРЫ С ТИКЕТАМИif (ticket<0) {
// нет открытых ордеров// может открыть/переоткрыть ?
} else {
if (!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
// что-то не так с синхронизацией, просто пропустим тикreturn;
}
if (OrderCloseTime()!=0) {
// ордер закрылся ручками или по стопам/тейкам (или стопаут, приплыли)
OnCloseOrder(); // обработать, разобраться
ticket=-1; // нет у нас больше тикета..// в этот тик больше не успетьreturn;
} else {
if ((OrderStopLoss()==0 && SL!=0) || (OrderTakeProfit()==0 && TP!=0)) {
// свежачок - надо ему выстаить Тейк и/или стоп
} else {
// для реала - проверять сработку Sl/Tp на ГЕПАХ, ЭТО ВАЖНО
}
}
}
//// РАЗБОРЫ с БАРАМИ
CheckForOnBar();
/// и так далее...
}
voidOnTimer()
{
// тики завершаем быстро-быстро, поэтому открытия баров дополнительно проверяем по таймеру
CheckForOnBar();
}
Bier wirkt Wunder und macht die Menschen freundlicher :-)
Um es einfacher zu machen, nehmen Sie meinen Quellcode, es hat eine Logik, die funktioniert, außer dem Problem, das ich beschrieben habe, ich verstehe es nicht ganz, mein Kopf kocht, aber ich kann keinen Nutzen daraus ziehen.
Ich habe das Gefühl, dass der Roboter immer stärker wird, ich mag es nicht, wenn ich Aufträge erteile oder nicht handeln möchte, da ich sie bereits erteilt habe, ich kann sie nicht öffnen, da ich sie bereits erteilt habe, er muss nur den Auftrag öffnen.
@MakarFX bereits tut. Wir sollten uns nicht in die Quere kommen.
Was ich sagen wollte... Schreiben Sie alles so, dass es für Sie (persönlich/persönlich) klar ist, ziehen Sie keinen Code mit Copy-Paste.
und ein stark vereinfachtes Roboterskelett sieht etwa so aus:
Bier wirkt Wunder und macht die Menschen freundlicher :-)
Erteilen Sie einen schwebenden Auftrag oder zwei in verschiedene Richtungen?
Ich stelle immer einen einzigen ausstehenden aus.
Probieren Sie es aus, fordern Sie es an
Probieren Sie es aus, fordern Sie es an
Ich werde Ihnen mitteilen, was passiert. Danke für die Hilfe.
Kann jemand den Grund für dieses Verhalten erklären?
Ich eröffne eine Bestellung
dann ändert der Expert Advisor sie
und dann passiert diese Scheiße
2021.07.29 18:53:58.313 '60744458': order #1639674290 sell 0.01 USDJPY closing at 0.000 failed [Off quotes] 2021.07.29 18:53:57.647 '60744458': close order #1639674290 sell 0.01 USDJPY at 109.519 sl: 0.000 tp: 0.000 at price 0.000Das Interessante ist, dass es auf USDJPY geschieht und nur auf andere Paare verkaufen
Kann jemand den Grund für dieses Verhalten erklären?
Ich eröffne eine Bestellung
dann ändert der Expert Advisor sie
und dann passiert diese Scheiße
Das Interessante daran ist, dass es nur bei USDJPY auftritt und bei den anderen alles in Ordnung ist
Wenn man etwas verstehen will, muss man lernen, wie man in einem Minimum an Zyklen ein Maximum an nützlichen Informationen erhält...
Um etwas zu verstehen, muss man lernen, wie man in möglichst wenigen Zyklen die nützlichsten Informationen herausfindet...
Es ist gut zu reden, wenn man weiß, was zu tun ist...
Hilfe mit Ratschlägen, wie man "das Beste aus nützlichen Informationen herausholen kann".
Kann jemand den Grund für dieses Verhalten erklären?
Ich eröffne eine Bestellung
dann ändert der Expert Advisor sie
und dann passiert diese Scheiße
Das Interessante ist, dass es auf USDJPY geschieht und nur auf andere Paare verkaufen
Funktioniert der EA, für den Sie den Code geschrieben haben, auf diese Weise?