SendOrderLimit

Author: VadimVP
0 Views
0 Downloads
0 Favorites
SendOrderLimit
//+------------------------------------------------------------------+
//|                                                     Version1.mq4 |
//|                                                          VadimVP |
//|                                                poluyan@fxmail.ru |
//+------------------------------------------------------------------+
#property copyright "VadimVP"
#property link      "poluyan@fxmail.ru"
#include <WinUser32.mqh>
/*
Ñêðèïò óñòàíîâèò îòëîæåííûé îðäåð ñ ëîòîì ðàâíûì âûáðàííûì Âàìè ðàçìåðîì óáûòêà â % îò ðàçìåðà äåïîçèòà.
Ïðè÷åì ðàçìåð óáûòêà ìîæíî óñòàíîâèòü ïðÿìî íà ýêðàíå ìîíèòîðà äâèãàÿ ñòðåëêó ââåðõ-âíèç (â ãðàíèöàõ LOSSmin è LOSSmax)
æåëòàÿ ëèíèÿ - Öåíà îòêðûòèÿ îòëîæåííîãî îðäåðà (ìîæíî äâèãàòü, èçìåíÿòü)
êðàñíàÿ ëèíèÿ - ÑòîðËîññ îðäåðà (ìîæíî äâèãàòü, èçìåíÿòü)
ñèíÿÿ ëèíèÿ - ÒàéêÏðîôèò îðäåðà (äâèãàòü íåëüçÿ, ïðèâÿçàíà ê ÑòîïËîññó ÷åðåç êîýôôèöèåíò kProfitLine
*/

// Ïàðàìåòðû ñîâåòíèêà:

double OrderTime   = 2; //âðåìÿ æèçíè îòëîæåííîãî îðäåðà â ÷àñàõ

double LOSSmin     = 3;// ìèíèìàëüíûé ïðîöåíò óáûòêà % (äèàïàçîí èçìåíåíèé, íèæíèé ïðåäåë)-çíà÷åíèå ïî óìîë÷àíèþ
double LOSSmax     = 20;// ìàêñèìàëüíûé ïðîöåíò óáûòêà %(äèàïàçîí èçìåíåíèé, âåðõíèé ïðåäåë)

double MaxLot      = 0.6;// ìàêñèìàëüíî ðàçðåøåííûé Âàìè ðàçìåð ëîòà äëÿ îðäåðà 

double kProfitLine = 1.25;// îòíîøåíèå ïðèáûëè ê óáûòêó ( TakeProfit = kProfitLine * TrailingStop)

color  clrOK       = Blue; // Öâåò øðèôòà OK (åñëè ðåàëüíîå çíà÷åíèå óáûòêà íàõîäèòñÿ â äèàïàçîíå +-10% îò çàäàííîãî Âàìè)
color  clrNO       = Red; // Öâåò øðèôòà NOT_OK (åñëè ðåàëüíîå çíà÷åíèå óáûòêà íàõîäèòñÿ çà ïðåäåëàìè äèàïàçîíå +-10% îò çàäàííîãî âàìè
int    font        = 11;  // Ðàçìåð øðèôòà 

//-------------------------------------------------------------------+


color clr; double PFL, Price, LastPrice; double DilerPercent = 0; datetime time;
int iii = 0; int ii = 0; double STL = 0; double LOT = 0; double deltareal=1; double LOSS = 0.1;


int init()  {DrowPriceLine(); LineStop(); Price = ObjectGet("Price", 1); LastPrice = Price; return(0);}

int deinit(){Comment (" ");ObjectDelete ("10");ObjectDelete ("123");ObjectDelete( "Profit");ObjectDelete ("321");ObjectDelete( "Price");ObjectDelete( "StopLine");return(0); }

int start()
  {
//----
if (IsConnected()) {

     while ( ObjectFind("StopLine")!=(-1) && ObjectFind("Price")!=(-1) )
     {if (ObjectFind("StopLine") == (-1)) {LineStop();}
            
     if (ObjectFind("123") == (-1)) {ObjectCreate ("123",OBJ_TEXT,0,Time[WindowBarsPerChart( )/3] ,WindowPriceMax() - (WindowPriceMax() - WindowPriceMin())/10 );
     ObjectSetText("123", "Ñòàðò ñêðèïòà", font, "Arial", clr);}
     
     if (ObjectFind("321") == (-1)) {ObjectCreate ("321",OBJ_ARROW,0,Time[WindowBarsPerChart( )/2] ,WindowPriceMin()+((WindowPriceMax() - WindowPriceMin())/10) );
     ObjectSet("321", OBJPROP_ARROWCODE, 231); ObjectSet("321", OBJPROP_WIDTH, 2); } 
     
     LastPrice = Price;        
     Price = ObjectGet("Price", 1);// öåíà æåëòîé ëèíèè - öåíà îòêðûòèÿ îòëîæåííîãî îðäåðà
     
     if (LastPrice != Price) { ObjectSet( "StopLine",1,(STL - (LastPrice - Price))); WindowRedraw( ) ;} // ïðè äâèæåíèè æåëòîé äâèãàåì êðàñíóþ òîæå


     time = TimeCurrent( ) + (60*60*OrderTime);
     
     STL = ObjectGet("StopLine", 1); textset(); DrowProfitLine();
    
     if (iii == 5) {Sleep (30); ObjectSet( "Price", 6, DarkOrange); ObjectSet( "StopLine", 6, Red); ObjectSet( "Profit", 6, Blue); WindowRedraw( ) ;} else Sleep (30);   
     if (iii == 10) {Sleep (30); ObjectSet( "Price", 6, Yellow); ObjectSet( "StopLine", 6, HotPink);ObjectSet( "Profit", 6, DodgerBlue); WindowRedraw( ) ;} else Sleep (30);     
     if (iii >= 10) iii = 0; iii = iii+1;    

    
    }
//-----------------------------------
     ObjectCreate( "StopLine", OBJ_HLINE, 0, 0, STL); ObjectSet( "StopLine", 6, Red);
     ObjectSet( "StopLine", 8, 3);WindowRedraw( );

     ObjectCreate( "Price", OBJ_HLINE, 0, 0, Price); ObjectSet( "Price", 6, Yellow);
     ObjectSet( "Price", 8, 3);WindowRedraw( );
     
     if (MessageBox ("Îòêðûòü îòëîæåííûé îðäåð ???    ","Ñêðèïò èíòåðåñóåòñÿ:",1)==1) startset();
    
} else MessageBox ("Íåò ñîåäèíåíèÿ ñ ñåðâåðîì!!!","  Ñêðèïò ñîîáùàåò:",0x00000000);   
//----
   return(0);
}
//+------------------------------------------------------------------+

int LineStop() {// Ðèñóåì ëèíèþ (êîòîðàÿ ìèãàåò)
ObjectDelete( "StopLine"); 
ObjectCreate( "StopLine", OBJ_HLINE, 0, 0,WindowPriceMin() + ((WindowPriceMax() - WindowPriceMin())/2.5) );
ObjectSet( "StopLine", 6, White); ObjectSet( "StopLine", 8, 2); WindowRedraw( ) ;
return(0);  }
//+------------------------------------------------------------------+
double textset() { 
  
  double delta = WindowPriceMax() - WindowPriceMin();
  double PriceMax = WindowPriceMax() - delta/10;
  double PriceMin = delta/10 + WindowPriceMin();
  if (ObjectGet("321", 1) > PriceMax) ObjectSet("321",1,PriceMax);
  if (ObjectGet("321", 1) < PriceMin) ObjectSet("321",1,PriceMin);
  double deltascreen = PriceMax - PriceMin;
  LOSS = (((ObjectGet("321", 1)-PriceMin)/deltascreen)*(LOSSmax - LOSSmin))+LOSSmin;
    if (STL > (Price  + Point*MarketInfo(Symbol(), MODE_STOPLEVEL))) deltareal = (STL - Price )/Point;
    if (STL < (Price  - Point*MarketInfo(Symbol(), MODE_STOPLEVEL))) deltareal = (Price  - STL)/Point;
  LOT = ((AccountFreeMargin()*(LOSS/100))/MarketInfo(Symbol(), MODE_TICKVALUE))/deltareal;
  LOT = Round(LOT);
  double LOSSreal = (LOT*deltareal*MarketInfo(Symbol(), MODE_TICKVALUE)/AccountFreeMargin())*100;
 
   if (MathAbs(LOSS-LOSSreal) < MathAbs(LOSS*0.1)) clr = clrOK; else clr = clrNO;//ìåíÿåì öâåò øðèôòà

   ObjectSetText("123","Çàäà÷à:LOSS="+DoubleToStr(LOSS,1)+" % "+"; Ïîëó÷èì:LOT="+DoubleToStr(LOT,2)+", LOSS="+DoubleToStr(LOSSreal,2)+"% (Ñïðåä="+ DoubleToStr(DilerPercent*100,1)+"%)", font, "Arial", clr);

   WindowRedraw( ) ;
   Comment ( "Ñóììà âîçìîæíîãî óáûòêà = "+DoubleToStr(AccountFreeMargin()*LOSSreal/100,0));
return(0); }

int startset()  { 

//-----
 Alert ("!!!  Ïîæàëóéñòà äîæäèòåëü îêîí÷àíèÿ ðàáîòû ñêðèïòà!");
 int resi = 0;
Price = MathRound (Price * MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)) );
Price = Price / MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)); 
STL = MathRound (STL * MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)) );
STL = STL / MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS));
PFL = MathRound (PFL * MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS)) );
PFL = PFL / MathPow ( 10, MarketInfo(Symbol(), MODE_DIGITS));
// ïðîäàæà
Print("ëèíèè Ñòîïîâ, Öåíû Îòêðûòèÿ è Ïðîôèòà :  ",STL,"   ",Price,"   ",PFL);
if ((STL>Price) && (MarketInfo( Symbol(), MODE_ASK) < Price)) resi = OrderSend (Symbol(),OP_SELLLIMIT,LOT, Price , 0, STL, PFL,"Version2",1, time, 0 );
if ((STL>Price) && (MarketInfo( Symbol(), MODE_ASK) > Price)) resi = OrderSend (Symbol(),OP_SELLSTOP,LOT, Price , 0, STL, PFL,"Version2",2, time, 0 );
// ïîêóïêà
if ((STL<Price) && (MarketInfo( Symbol(), MODE_BID) > Price)) resi = OrderSend (Symbol(),OP_BUYLIMIT,LOT, Price , 0, STL, PFL,"Version2",3, time, 0 );
if ((STL<Price) && (MarketInfo( Symbol(), MODE_BID) < Price)) resi = OrderSend (Symbol(),OP_BUYSTOP,LOT, Price , 0, STL, PFL,"Version2",4, time, 0 );

 Alert ("***************************************************");
 if (resi == (-1)) Alert ("!!! Íåóäà÷íîå îòêðûòèå îðäåðà! Ïîâòîðèòå ïîïûòêó! Îøèáêà ¹: "+GetLastError( ) ); else Alert ("Îðäåð îòêðûò, ðåçóëüòàò : "+resi);
 Alert ("************ èíôîðìàöèÿ îò ñêðèïòà ************");

return(0);  }

void DrowProfitLine()
{

// ObjectDelete( "Profit"); 
if (ObjectFind("Profit") == (-1)){
ObjectCreate( "Profit", OBJ_HLINE, 0, 0, (Price +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL))) );
ObjectSet( "Profit", 6, Blue); ObjectSet( "Profit", 8, 2); WindowRedraw( ) ;}

if (STL > (Price +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) {PFL = Price  - ((STL-Price )*kProfitLine ); 
 DilerPercent = (MarketInfo( Symbol(), MODE_ASK) - MarketInfo( Symbol(), MODE_BID)) / (STL-Price );  }
if (STL < (Price -Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) {PFL = Price  + ((Price -STL)*kProfitLine ); 
 DilerPercent =(MarketInfo( Symbol(), MODE_ASK) - MarketInfo( Symbol(), MODE_BID)) / (Price -STL);   }
if (STL > (Price -Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL))) && STL < (Price +Point*2*(MarketInfo(Symbol(), MODE_STOPLEVEL)))) ObjectDelete( "Profit");

ObjectSet( "Profit", 1, PFL );
WindowRedraw( ) ;

}

void DrowPriceLine()
{
if (ObjectFind("Price") == (-1)){
ObjectCreate( "Price", OBJ_HLINE, 0, 0,WindowPriceMin() + ((WindowPriceMax() - WindowPriceMin())/2) );
ObjectSet( "Price", 6, Yellow); ObjectSet( "Price", 8, 3); WindowRedraw( ) ;}   
}
   
double Round(double A1) // Ôóíêöèÿ îêðóãëÿåò À1 äî Øàãà Ëîòà è ïðîâåðÿåò íèæíþþ ãðàíèöó è âåðõíèå ãðàíèöû
{
A1 = MathRound (A1 / MarketInfo(Symbol(), MODE_LOTSTEP));
A1 = A1 * MarketInfo(Symbol(), MODE_LOTSTEP);

if (A1 < MarketInfo(Symbol(), MODE_MINLOT)) A1 = MarketInfo(Symbol(), MODE_MINLOT);
if (A1 > MaxLot) A1 = MaxLot;
if (A1 > (AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED))) A1 = (AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED));  //ñðåäñòâà äëÿ îòêðûòèÿ 1 ëîòà
return(A1);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---