Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
wie funktioniert es im Allgemeinen und wie wird es verwendet?
vielen Dank im Voraus
Die Idee, MessageBox für den Indikator zu verwenden, um seine Ausführung zu verlangsamen, ist großartig. Das hätte ich wahrscheinlich nie vermutet. Es eröffnet viele Möglichkeiten für die interaktive Auftragsvergabe. Meinen Respekt an dich, Komposter!
Was die Kritiker der Umsetzung betrifft, so weiß ich nicht, warum sie sagen, sie sei "grob".
Ich bin sicher, dass es für viele Händler sehr bequem sein wird, mit Ihrem Skript für die Platzierung von Pending Orders zu arbeiten.
Horn, ich habe gesagt, was ich denke, und ich habe überhaupt niemanden beschimpft. Denken Sie also bitte das nächste Mal daran.
Viel Glück :)
Sie übertragen es auf den Chart. Der Anknüpfungspunkt ist der Eröffnungskurs. Stop-Loss - 50 Punkte, Take-Profit - +50 Punkte.
Sie verschieben die Linien auf die gewünschten Niveaus(Take-Profit kann gelöscht werden), drücken Sie ok, der Auftrag wird erteilt.
Wenn Openprice_line höher als der Marktpreis ist - wird der Auftrag entweder Buy Stop oder Sell Limit (abhängig von Stop Loss), wenn es niedriger ist - Sell Stop oder Buy Limit (das gleiche).
das Skript ist sehr grob, keine Kontrollen, alles ist zufällig =)))
wird begeistert sein - wir werden es verbessern :))
Danke für die Klarstellung, wir werden das auf jeden Fall berücksichtigen und nicht wieder while(true) mit Bestellungen machen.
Hier ist derselbe Auftrag, aber für den Verkauf geändert.
(Ich hoffe, ich habe alles geändert)
//+------------------------------------------------------------------+ //| order_sell.mq4 | //| Copyright c 2004, Alexander Ivanov. | //| mailto:alexander@indus.ru | //+------------------------------------------------------------------+ //| Разрешите импорт функций из библиотек через: | //| "Сервис -> Настройки -> Советники -> Разрешить импорт DLL" | //+------------------------------------------------------------------+ #property copyright "Copyright c 2004, Alexander Ivanov." #property link "mailto:alexander@indus.ru" #include <WinUser32.mqh> #include <stdlib.mqh> #include <stderror.mqh> //+------------------------------------------------------------------+ //| Указываем количество последних дней, на которых ищем минимум | //| для установки стоплосса | //+------------------------------------------------------------------+ #define DAYS_TO_CONSIDER 3 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } int deinit() { //---- просто удалим свои линии стопов ObjectDelete( "order_sell_Stop_Loss_Line"); ObjectDelete( "order_sell_Take_Profit_Line"); //---- return(0); } //+------------------------------------------------------------------+ //| Основная функция скрипта | //+------------------------------------------------------------------+ int start() { double DaysLowArray[]; double dMyStopLoss = 0; double dMyPrice = 0; double dMyTakeProfit = 0; double dMyLots = 0; //---- скопируем массив дневных данных if(ArrayCopySeries(DaysLowArray, MODE_HIGH, Symbol(),PERIOD_D1) < DAYS_TO_CONSIDER) { return(-1); } //---- расчет цен dMyPrice = Bid; dMyStopLoss = DaysLowArray[Highest(Symbol(),PERIOD_D1,MODE_HIGH,DAYS_TO_CONSIDER,0)]; dMyTakeProfit = dMyPrice - 2*MathMax((MathAbs(Ask-Bid)/2),MathAbs(dMyPrice-dMyStopLoss)); dMyStopLoss += 10*Point; dMyLots = 0.1; //---- выставим линии для визуального управления стопами ObjectCreate( "order_sell_Stop_Loss_Line", OBJ_HLINE, 0, 0, dMyStopLoss, 0, 0, 0, 0 ); ObjectSet( "order_sell_Stop_Loss_Line", OBJPROP_COLOR, Red ); ObjectSetText( "order_sell_Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Red ); ObjectCreate( "order_sell_Take_Profit_Line", OBJ_HLINE, 0, 0, dMyTakeProfit, 0, 0, 0, 0 ); ObjectSet( "order_sell_Take_Profit_Line", OBJPROP_COLOR, Lime ); ObjectSetText( "order_sell_Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Lime ); //---- запросим подтверждение на отработку string quest="Вы хотите продать "+DoubleToStr(dMyLots,2)+" "+Symbol()+" по цене Bid "+ DoubleToStr(dMyPrice,Digits)+" \n\n"+ "Переместите выставленные линии на необходимые уровни и нажмите ОК \n"+ "(красная линия - Stop Loss, зеленая - Take Profit)\n\n"+ "Нажмите Отмена чтобы отказаться от сделки"; if(MessageBoxA(0,quest,"Визуальная установка ордера на продажу", MB_OKCANCEL | MB_ICONASTERISK | MB_TOPMOST)!=IDOK) return(-2); //---- трейдер согласился, возьмем новые уровни стопов и обязательно проверим их! dMyStopLoss =NormalizeDouble(ObjectGet( "order_sell_Stop_Loss_Line", OBJPROP_PRICE1),Digits); dMyTakeProfit=NormalizeDouble(ObjectGet( "order_sell_Take_Profit_Line",OBJPROP_PRICE1),Digits); if((dMyStopLoss>0 && dMyStopLoss<Bid) || (dMyTakeProfit>0 && dMyTakeProfit>Bid)) { Print("Неправильно выставлены уровни Stop Loss и Take Profit!"); MessageBoxA(0,"Неправильно выставлены уровни Stop Loss и Take Profit! \n"+ "Операция отменена\n\n", "Визуальная установка ордера на продажу",MB_OK | MB_ICONSTOP | MB_TOPMOST); return(-3); } //---- выведем в лог сообщение об заявке Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ",DoubleToStr(dMyPrice,Digits), "sl ",DoubleToStr(dMyStopLoss,Digits)," tp ",DoubleToStr(dMyTakeProfit,Digits)); //---- пробуем послать команду int ticket=OrderSend(Symbol(),OP_SELL,dMyLots,dMyPrice,3,dMyStopLoss,dMyTakeProfit, "Ordered by \"order_sell\" script" ,255,0,HotPink); if(ticket>0) // все отлично - заявка прошла { //---- сразу же выведем в лог подтверждение Print("#",ticket," sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ", DoubleToStr(dMyPrice,Digits)," is done"); //---- покажем окно if(MessageBoxA(0,"Ордер успешно исполнен \nРаспечатать его?", "Визуальная установка ордера на продажу", MB_YESNO | MB_ICONASTERISK | MB_TOPMOST)==IDYES) { OrderPrint(); } //---- все ок, выходим return(0); } //---- тут все плохо - выведем в лог сообщение int err=GetLastError(); Print("sell ",DoubleToStr(dMyLots,2)," ",Symbol()," at ", DoubleToStr(dMyPrice,Digits)," failed [",ErrorDescription(err),"]"); //----покажем окно MessageBoxA(0,ErrorDescription(err), "Ошибка визуальной установки ордера", MB_OK | MB_ICONERROR | MB_TOPMOST); return(-4); } //+------------------------------------------------------------------+я использовал MB_TOPMOST, попробуй, у меня вроде бы получилось.
Wo soll ich ihn schreiben?
Zum Beispiel hier :)
MessageBoxA(0,ErrorDescription(err), "Error", MB_OK | MB_ICONERROR | MB_TOPMOST);
Es tut mir leid, ich bin wütend geworden.
Das ist das Schöne daran!
an Komposter:
Wenn es nicht zu schwierig ist, verfeinern Sie Ihr Skript bitte so, dass es alle Arten von Kontrollen usw. enthält.
Und dann werden wir drei tolle Drehbücher haben:
1. eine für die Platzierung schwebender Aufträge;
2. eine für Marktkaufaufträge;
3. eine für einen Marktverkaufsauftrag.
Das ist noch nicht genug!
Und dann werden wir weiter nach anderen zusätzlichen Funktionen suchen, vielleicht geben die Leute Hinweise oder bitten darum, etwas Bestimmtes zu tun... und noch schöner wäre es, wenn sich jemand an der Entwicklung beteiligen würde ;)
Beim Kompilieren des Expertencodes wird eine Fehlerwarnung
'4107'-Umbestimmung mit einem anderen Wert
Es geht in die Zeile "Log the request message".
Was muss außer Kraft gesetzt werden?