Fans des GUOs - page 2

 
Excusez-moi, puis-je avoir une description détaillée du script guo ?

que fait-il en général et comment l'utiliser ?

merci d'avance
 
<br / translate="no"> Horn 06.02.05 06:45
L'idée d'utiliser MessageBox pour l'indicateur afin de ralentir son exécution est excellente. Je ne l'aurais probablement jamais deviné. Il ouvre de nombreuses possibilités pour le placement interactif des commandes. Mon respect à vous komposter !
Quant à ceux qui critiquent la mise en œuvre, je ne sais pas pourquoi ils disent qu'elle est "grossière".
Je suis sûr qu'il sera très pratique pour de nombreux traders de travailler avec votre script pour placer des ordres en attente.


Horn, j'ai dit ce que je pense et je n'ai grondé personne. Alors, s'il vous plaît, pensez-y la prochaine fois.
Bonne chance :)
 
Flower_of_Life 06.02.05 17:42

vous le transférez sur le graphique. le point de fixation est le prix d'ouverture. stop loss - 50 points, take profit - +50 points.
vous déplacez les lignes aux niveaux souhaités(le take profit peut être supprimé), appuyez sur ok, l'ordre est placé.

Si Openprice_line est supérieur au prix du marché - l'ordre sera soit Buy Stop ou Sell Limit (en fonction du Stop Loss), s'il est inférieur - Sell Stop ou Buy Limit (le même).


le script est très grossier, pas de vérifications, tout est aléatoire =)))


sera enthousiaste - nous l'améliorerons :))
 
est-il possible de faire glisser les stops et les profits directement sur les lignes ?
 
Comment un rédacteur expert doit procéder :

Merci pour la clarification, nous en tiendrons compte et ne ferons plus de while(true) avec les commandes.

Voici le même ordre mais modifié pour vendre.
(J'espère que j'ai tout changé)

//+------------------------------------------------------------------+
//|                                                   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, попробуй, у меня вроде бы получилось.

Où dois-je l'écrire ?

Par exemple ici :)
MessageBoxA(0,ErrorDescription(err), "Error", MB_OK | MB_ICONERROR | MB_TOPMOST) ;
 
Horn, j'ai dit ce que je pensais et je n'ai grondé personne. Alors la prochaine fois, s'il vous plaît, pensez à quelque chose à écrire. <br / translate="no">

Je suis désolé, je me suis mis en colère.
 
pour que vous puissiez faire glisser les arrêts et les bénéfices juste au-dessus des lignes ?

C'est là toute la beauté de la chose !

à Komposter :
Si cela ne pose pas trop de problèmes, veuillez affiner votre script pour y inclure toutes sortes de contrôles, etc.
Et puis nous aurons trois grands scénarios :

1. un pour placer des ordres en attente ;
2. un pour l'ordre d'achat sur le marché;
3. un pour l'ordre de vente sur le marché.
Ce n'est pas suffisant !

Et puis nous continuerons à chercher d'autres fonctionnalités supplémentaires, peut-être que les gens donneront des conseils ou demanderont de faire quelque chose de spécifique... et ce qui serait encore mieux, c'est que quelqu'un rejoigne le développement ;)
 
Il semble que MessageBox devrait être introduit dans les fonctions MQL4 standard, de sorte que vous ne devez pas autoriser explicitement les appels de fonctions DLL. Et ça marchera plus vite.
 
Renatu.
Lors de la compilation du code expert, un avertissement d'erreur
4107'-redéfinition avec une autre valeur
Il va à la ligne "enregistrer le message de la demande".
Qu'est-ce qui doit être remplacé ?