Fan di GUO - pagina 2

 
Mi scusi, posso avere una descrizione dettagliata della scrittura guo?

cosa fa in generale e come usarlo?

grazie in anticipo
 
<br / translate="no"> Corno 06.02.05 06:45
L'idea di usare MessageBox per l'indicatore per rallentare la sua esecuzione è ottima. Probabilmente non l'avrei mai detto. Si aprono molte possibilità per il collocamento interattivo degli ordini. Il mio rispetto per te komposter!
Per quanto riguarda coloro che criticano l'implementazione, non so perché dicono che è "rozzo".
Sono sicuro che sarà molto conveniente per molti trader lavorare con il tuo script per piazzare ordini pendenti.


Horn, ho detto quello che penso e non ho rimproverato nessuno. Quindi, per favore, pensateci la prossima volta.
Buona fortuna :)
 
Flower_of_Life 06.02.05 17:42

lo trasferisci sul grafico. il punto di attacco è il prezzo di apertura. stop loss - 50 punti, take profit - +50 punti.
sposti le linee ai livelli richiesti(take profit può essere cancellato), premi ok, l'ordine è piazzato.

Se Openprice_line è superiore al prezzo di mercato - l'ordine sarà o Buy Stop o Sell Limit (a seconda dello Stop Loss), se è inferiore - Sell Stop o Buy Limit (lo stesso).


lo script è molto rozzo, nessun controllo, tutto è a caso =))


sarà entusiasta - lo miglioreremo :))
 
quindi è possibile trascinare gli stop e i profitti direttamente sulle linee?
 
Come dovrebbe procedere uno scrittore esperto:

Grazie per il chiarimento, ne terremo sicuramente conto e non faremo più while(true) con gli ordini.

Ecco lo stesso ordine ma modificato per vendere.
(Spero di aver cambiato tutto)

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

Dove dovrei scriverlo?

Per esempio qui :)
MessageBoxA(0,ErrorDescription(err), "Error", MB_OK | MB_ICONERROR | MB_TOPMOST);
 
Horn, ho detto quello che pensavo e non ho rimproverato nessuno. Quindi la prossima volta, per favore, pensate a qualcosa da scrivere. <br / translate="no">

Mi dispiace, mi sono arrabbiato.
 
in modo da poter trascinare gli stop e i profitti proprio sulle linee?

Questo è il bello!

a Komposter:
Se non è troppo disturbo, perfezionate il vostro script per avere tutti i tipi di controlli, ecc.
E poi avremo tre grandi sceneggiature:

1. Uno per piazzare ordini in sospeso;
2. uno per l'ordine di acquisto sul mercato;
3. uno per l'ordine di vendita a mercato.
Non è abbastanza!

E poi continueremo a cercare altre caratteristiche aggiuntive, forse la gente darà qualche suggerimento o chiederà di fare qualcosa di specifico... e quello che sarà ancora più bello è se qualcuno si unisce allo sviluppo ;)
 
Sembra che MessageBox debba essere introdotto nelle funzioni standard di MQL4, in modo da non dover permettere esplicitamente le chiamate a funzioni DLL. E funzionerà più velocemente.
 
Renatu.
Durante la compilazione del codice esperto, un avviso di errore
'4107'- ridefinizione con un altro valore
Va alla linea "registra il messaggio di richiesta".
Cosa deve essere sovrascritto?