Open Forex4you Account

Server รัน EA 1000 / ปี

สั่งชื้อคู่มือการโปรแรกม MQL4

Author Topic: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น  (Read 15621 times)

zidane19

  • Newbie
  • *
  • Posts: 8
double Lot=0.1;
int SL=15;
int TP=15;
string SymX="GBPJPY";

OrderSend(SymX,OP_BUY,Lot,MarketInfo(SymX,MODE_ASK),3,MarketInfo(SymX,MODE_ASK)-(Point*SL),MarketInfo(SymX,MODE_ASK)+(Point*TP),"Test",0,0,green);

โค๊ดด้านบน ไม่ผ่านครับ

แต่โค๊ดด้านล่าง ผ่านครับ

OrderSend("GBPJPY",OP_BUY,Lot,MarketInfo("GBPJPY",MODE_ASK),3,MarketInfo("GBPJPY",MODE_ASK)-(Point*SL),MarketInfo("GBPJPY",MODE_ASK)+(Point*TP),"Test",0,0,green);

ปัญหาผมคือตัวแปร SymX ครับ ทำไมไม่แทนค่า ชื่อ ซิมโบล ที่มีชื่อว่า "GBPJPY" ครับผม

ถ้าใส่ตรงๆ "GBPJPY" หรือเอาค่า Symbol(); ไปใส่แทน จะผ่าน

แต่ถ้าเอาตัวแปร ไปใส่แทน ( SymX ) ไม่ผ่านทันทีครับ และไม่มี Error ด้วยครับ ( ถ้ามีเออเร่อร์ ก็ยังพอต่อสู้กับกู้เกิ้ลบ้าง น่ะครับ )

ผมรบกวนด้วยนะครับ
« Last Edit: มีนาคม 28, 2017, 11:39:57 am by zidane19 »

zidane19

  • Newbie
  • *
  • Posts: 8
ต่อจากด้านบน


SymX ด้านล่างนี้ แทนค่า Symbol(); ได้ครับ

double iMac=iMACD(SymX,TF,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

แต่ทำไม OrderSend แทนค่าไม่ได้ครับ


zidane19

  • Newbie
  • *
  • Posts: 8
ผม สงสัยที่ Point ครับ

ผมสั่ง Print(Point); ออกมา มันมีค่าเป็น 0 ครับ

ทำให้มันคูณ SL หรือ TP แล้ว จะได้ค่า Ask ตัวเดิม

ตลาดก็เลยไม่ยอมให้ซื้อขายครับ ( ราคาเปิด+SL+TP เท่ากัน )

แต่ขออนุญาต ขอความรู้เรื่อง Point เพิ่มเติมครับ ว่ามันทำงานยังไงครับ

ปรกติมันก็ไม่เป็นอะไรนะครับ ผมก็ใช้ตามที่หนังสือสอนมา

แต่คราวนี้ ผมมาเขียน แบบว่า ให้เข้าออเดอร์ คู่เงิน ที่ไม่มีอีเอ ติดตั้งอยู่น่ะครับ  ก็เลยต้องใช้ Makeinfo เข้าช่วย

รบกวนผู้รู้ด้วยนะครับ  ขอบคุณครับ

ปล.ตอนนี้ก็แก้เบื้องต้นไปก่อน โดยให้คู่เงินที่มี Point เท่ากัน สุ่มค่าที่ต้องการร่วมกันไปก่อนครับ เช่นพวก GJ EJ UJ เป็นต้นครับ

tanakrit99

  • Newbie
  • *
  • Posts: 23
////////////////////////////////////////////////////////////
Point คืออย่างนี้ครับ

เช่น
1.11111  Point = 0.00001
1.1111    Point = 0.0001
0.111     Point = 0.001

ปริั้นตัวมันก็จะได้เท่านี้ครับ
////////////////////////////////////////////////////////////
   double Lot=0.1;
   int SL=100;
   int TP=100;
   string SymX="GBPJPY";
   OrderSend(SymX,OP_BUY,Lot,MODE_ASK,3,MarketInfo(SymX,MODE_ASK)-SL*MarketInfo(SymX,MODE_POINT),MarketInfo(SymX,MODE_ASK)+TP*MarketInfo(SymX,MODE_POINT),"Test",0,0,Green);
  }
และอย่าลืมว่า ค่า SL,TP ควรมีค่ามากกว่าหรือเท่ากับค่าในรูปครับ
เดี่ยวผมงมหาด้วยว่าแก้ยังไง
« Last Edit: มีนาคม 28, 2017, 09:02:58 pm by tanakrit99 »

zidane19

  • Newbie
  • *
  • Posts: 8
โอ้ว ต้องขอขอบคุณ คุณtanakrit99 มากๆ ครับ เมื่อชั่วโมงที่แล้ว ผมได้ใช้วิธีนี้ไปพลางๆ ครับ

//digit&poi
int Digit=MarketInfo(SymX,MODE_DIGITS);
double Poi=0;

if(Digit==2){Poi=0.01;}
if(Digit==3){Poi=0.001;}
if(Digit==4){Poi=0.0001;}
if(Digit==5){Poi=0.00001;}
Print(Digit,"===",Poi);
//digit&poi

แต่ทว่า เจอวิธีแก้ของคุณเข้า (ไฮไลด์สีส้ม) คงต้องใช้แบบของคุณแล้วหล่ะครับ เพราะลดบรรทัดได้พอควรครับ

ขอบคุณมากๆ เลยนะครับ
« Last Edit: มีนาคม 28, 2017, 11:12:05 pm by zidane19 »

bird2000

  • Newbie
  • *
  • Posts: 3
ลองดูตรง stoplevel ครับ MarketInfo(SymX,MODE_STOPLEVEL)

ถ้าตัวนี้มากกว่า SL หรือ TP ก็น่าจะเปิด order ไม่ได้นะ

หรือทดลองเปิด order แบบยังไม่ใช้ SL กับ TP ดูก่อน

ปล. ผมแค่ดูตัวอย่างนะไม่ได้ทดลอง code จริง ๆ

zidane19

  • Newbie
  • *
  • Posts: 8
ขอบคุณ คุณ bird2000 มากๆ เลยครับ

ที่ให้ความรู้เพิ่มเติม

เรื่อง MarketInfo(SymX,MODE_STOPLEVEL);

ปัญหาของผมแก้ได้แล้วครับ มันเป็นกับ การใช้ Point ที่ไม่อ้าง ฟังก์ชั่น Marketinfo

เนื่องจากผมใช้ระบบ การเรียก คู่เงิน ที่อีเอ ไม่ได้รันอยู่น่ะครับ

ถ้าอ้างคู่เงิน ที่อีเอรันอยู่ ก็ใช้ Point ธรรมดาได้ครับ...