포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 146

 

나는 보통 별도의 기능으로 주문을 보냅니다. 그래서 하나의 기능으로 연기와 시장가 주문을 동시에 보낼 수 있도록 이 순간을 최적화하고 싶었다.

이것을 구현하는 가장 좋은 방법을 알려주실 수 있습니까?

실제로 미결제 주문 을 보낼 때 위(아래) Ask(Bida) 시가를 각각 확인하고 몇 가지 추가 사항을 고려해야 합니다.

나는 다른 사람들처럼 보입니다 .. Kim의 가장 간단한 옵션을 가져 가겠습니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
   color     clOpen;
   datetime ot;
   double    pp, pa, pb;
   int       dg, err, it, ticket= 0 ;
   string    lsComm=WindowExpertName()+ " " +GetNameTF( Period ());
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
   for (it= 1 ; it<=NumberOfTry; it++) {
     if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) {
       Print ( "OpenPosition(): Остановка работы функции" );
       break ;
    }
     while (!IsTradeAllowed()) Sleep ( 5000 );
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
     if (op==OP_BUY) pp=pa; else pp=pb;
    pp= NormalizeDouble (pp, dg);
    ot= TimeCurrent ();
    ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0 , clOpen);
     if (ticket> 0 ) {
       if (UseSound) PlaySound (NameFileSound); break ;
    } else {
      err= GetLastError ();
       if (pa== 0 && pb== 0 ) Message( "Проверьте в Обзоре рынка наличие символа " +sy);
       // Вывод сообщения об ошибке
       Print ( "Error(" ,err, ") opening position: " ,ErrorDescription(err), ", try " ,it);
       Print ( "Ask=" ,pa, " Bid=" ,pb, " sy=" ,sy, " ll=" ,ll, " op=" ,GetNameOP(op),
             " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
       // Блокировка работы советника
       if (err== 2 || err== 64 || err== 65 || err== 133 ) {
        gbDisabled=True; break ;
      }
       // Длительная пауза
       if (err== 4 || err== 131 || err== 132 ) {
         Sleep ( 1000 * 300 ); break ;
      }
       if (err== 128 || err== 142 || err== 143 ) {
         Sleep ( 1000 * 66.666 );
         if (ExistPositions(sy, op, mn, ot)) {
           if (UseSound) PlaySound (NameFileSound); break ;
        }
      }
       if (err== 140 || err== 148 || err== 4110 || err== 4111 ) break ;
       if (err== 141 ) Sleep ( 1000 * 100 );
       if (err== 145 ) Sleep ( 1000 * 17 );
       if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
       if (err!= 135 ) Sleep ( 1000 * 7.7 );
    }
  }
   return (ticket);
}

아무것도 확인하지 않습니다. 그 기능은 시장가 주문을 여는 용도로만 사용됨을 알 수 있습니다.

논리적이지 않다고 생각합니다. 전송된 경우 모든 유형의 주문입니다. 내 생각대로 쓰다 보면 얼핏 보면 너무 길어질 것 같다.

일반적으로 이러한 순간을 더 잘 구현하는 방법에 대한 도움과 팁을 요청합니다.

 
hoz :

나는 보통 별도의 기능으로 주문을 보냅니다. 그래서 하나의 기능으로 연기와 시장가 주문을 동시에 보낼 수 있도록 이 순간을 최적화하고 싶었다.

이것을 구현하는 가장 좋은 방법을 알려주실 수 있습니까?

결국 미결주문을 보낼 때 위(아래) Ask(Bida) 시가를 각각 확인하고, 몇 가지 더 고려해야 합니다.

나는 다른 사람들처럼 보입니다 .. Kim의 가장 간단한 옵션을 가져 가겠습니다.

아무것도 확인하지 않습니다. 그 기능은 시장가 주문을 여는 용도로만 사용됨을 알 수 있습니다.

논리적이지 않다고 생각합니다. 전송된 경우 모든 유형의 주문입니다. 내 생각대로 쓰다 보면 얼핏 보면 너무 길어질 것 같다.

일반적으로 이러한 순간을 더 잘 구현하는 방법에 대한 도움과 팁을 요청합니다.

음, Igor의 함수는 이 함수의 이름에 반영된 작업을 정확히 수행합니다. 이 함수를 호출하기 전에 모든 설정과 확인을 완료해야 합니다. 결국 함수 자체는 할당된 작업만 수행합니다. 함수에 전달된 매개변수 로 위치를 엽니다 . 더 이상은 수행하지 않습니다. 필요한 오류 처리를 통해 이 작업을 훌륭하게 수행합니다. 누락 된 것 - 직접 수정하십시오.

비유하자면 상점에서 인스턴트 커피를 구입할 때 끓는 물과 설탕, 다른 재료의 자동 혼합이 제공되지 않습니다. 직접 커피를 만드는 방법을 더 잘 알 수 있습니다.

 

여러분... 혹시 가능한가요... 다른 루프 조건에서 다시 작성해주세요...

즉, 멋진 bbands_stop 표시기가 있습니다.


for (shift=Nbars-Length-1;shift>=0;shift--)

{

smax[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);

smin[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);

if (Close[shift]>smax[shift+1]) trend=1;

if (Close[shift]<smin[shift+1]) trend=-1;


bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

if (trend>0)

UpTrendBuffer[shift]=bsmin[shift];

else

DownTrendBuffer[shift]=bsmax[shift];

}

그러나 이전 결과와 유사한 코드를 작성할 수도 있습니다. 그러나 이미 루프 아래에 있습니다.

for(i = 0; i <= limit; i++) {

둘째날 앉으니 생각이 안나네요...

 
ALL PRUEVETS 질문은 물론 어리석습니다. 1핍이 1달러가 되는 데 필요한 로트 크기는 얼마입니까?
 
0.1
 
FEAR :
ALL PRUEVETS 질문은 물론 어리석습니다. 1핍이 1달러가 되는 데 필요한 로트 크기는 얼마입니까?
그것은 부지의 크기에 달려 있습니다.
 
nikelodeon :
0.1
항상은 아니다
 
PapaYozh :
항상은 아니다
어깨에 따라...
 
0.1 레버리지 1:100
 
nikelodeon :
어깨에 따라...

니켈로디언 :
0.1 레버리지 1:100

포인트의 가치에 관해서는 레버리지가 중요하지 않습니다.

사유: