Fans von GUOs - Seite 2

 
Entschuldigung, kann ich eine detaillierte Beschreibung der Guo-Schrift erhalten?

wie funktioniert es im Allgemeinen und wie wird es verwendet?

vielen Dank im Voraus
 
<br / translate="no"> Horn 06.02.05 06:45
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 :)
 
Flower_of_Life 06.02.05 17:42

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 :))
 
Ist es also möglich, Stopps und Gewinne direkt über die Linien zu ziehen?
 
Wie ein Fachautor vorgehen sollte:

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);
 
Horn, ich habe gesagt, was ich denke, und habe niemanden gescholten. Denken Sie also das nächste Mal bitte an etwas, das Sie schreiben können. <br / translate="no">

Es tut mir leid, ich bin wütend geworden.
 
damit Sie Stopps und Gewinne direkt über die Linien ziehen können?

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 ;)
 
Es scheint, dass MessageBox in Standard-MQL4-Funktionen eingeführt werden sollte, so dass Sie nicht explizit DLL-Funktionsaufrufe erlauben müssen. Und es wird schneller funktionieren.
 
Renatu.
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?